锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲影院一区,鲁大师成人一区二区三区,久久久久久久久久久久久女国产乱 http://www.shnenglu.com/lf426/Game Design Using C++ and SDLzh-cnTue, 30 Sep 2025 01:15:44 GMTTue, 30 Sep 2025 01:15:44 GMT60Loih錛堣惤鍩? 鏃犳晫鑻遍泟浼犺錛?/title><link>http://www.shnenglu.com/lf426/archive/2013/07/22/202025.html</link><dc:creator>lf426</dc:creator><author>lf426</author><pubDate>Mon, 22 Jul 2013 04:17:00 GMT</pubDate><guid>http://www.shnenglu.com/lf426/archive/2013/07/22/202025.html</guid><wfw:comment>http://www.shnenglu.com/lf426/comments/202025.html</wfw:comment><comments>http://www.shnenglu.com/lf426/archive/2013/07/22/202025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/lf426/comments/commentRss/202025.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/lf426/services/trackbacks/202025.html</trackback:ping><description><![CDATA[<div>榪欎箞闀挎椂闂翠簡錛屾垜鐨勪富瑕佺簿鍔涙斁鍦ㄨ嫳璇殑瀛︿範涓婇潰銆傚洜涓烘垜璁よ瘑鍒拌綆楁満縐戝涓庡浗闄呮按騫崇殑宸窛宸ㄥぇ錛岃屼笖璇█鏄叧閿傜畝鍗曠殑璇達紝浣犱笉鑳芥寚鏈涘埆浜虹敤涓枃鏉ュ啓娉ㄩ噴錛岀敤鎷奸煶鏉ュ啓鍑芥暟銆?br />瀵逛簬娓告垙鐨勮璁′竴鐩村仠鐣欏湪鐞嗚錛屽墠孌墊椂闂寸爺絀朵簡涓媁E錛圵ar3 Map Editor錛夛紝鍙戠幇榪樻槸寰堝己澶х殑錛屽彲浠ュ疄鐜頒竴閮ㄥ垎鎴戠殑娓告垙璁捐鐞嗗康錛屼簬鏄綔浜嗚繖涔堜竴寮犲鎴樺湴鍥俱傚叾涓昏璁捐鎬濊礬灝辨槸紿佸嚭鍏靛姏鍒嗗悎錛岃祫婧愭帶鍒剁殑絳栫暐錛屽噺灝戝鎵嬮熺殑紜姹傘?br />鍦板浘鍏朵粬淇℃伅鍦ㄨ繖閲岋細<br /><a >http://loih.blog.163.com/</a><br /><br />2013騫?0鏈?0鏃ユ洿鏂癓oih Beta 0.11a Team Mode<br />錛堝洟闃熸ā寮忥紝鏀寔5v5錛?br /><a title="Loih Beta 0.11a Team Mode" href="/Files/lf426/Loih.0.11a.team.rar">Loih Beta 0.11a Team Mode</a><br /><br />2013騫?鏈?9鏃ユ洿鏂癓oih Beta 0.11a<br />錛堝寘鎷?#8220;鏍囧噯瀵規垬鐗?#8221;鍜?#8220;甯﹂噹鎬増”錛?br /><a title="Loih Beta 0.11a" href="/Files/lf426/Loih.0.11.rar">Loih Beta 0.11a</a><br /><br />钀藉焹鐢熷瓨鎴橈紙鍩轟簬Loih 0.07錛屽甫AI錛?br /><a title="钀藉焹鐢熷瓨鎴樹笅杞? href="/Files/lf426/Loih.0.07.Survival.rar">钀藉焹鐢熷瓨鎴樹笅杞?/a><br /><br />钀藉焹錛氭棤鏁岃嫳闆勪紶璇?Beta 0.09e<br /><a title="鏍囧噯瀵規垬鐗?.09e" href="/Files/lf426/Loih.0.09e.rar">鏍囧噯瀵規垬鐗?.09e</a><br /><br />钀藉焹錛氭棤鏁岃嫳闆勪紶璇?Beta 0.10b<br /><a title="鏍囧噯瀵規垬鐗?.10b" href="/Files/lf426/Loih.0.10b.rar">鏍囧噯瀵規垬鐗?.10b</a></div><img src ="http://www.shnenglu.com/lf426/aggbug/202025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/lf426/" target="_blank">lf426</a> 2013-07-22 12:17 <a href="http://www.shnenglu.com/lf426/archive/2013/07/22/202025.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>褰誨簳瑙e瘑C++瀹藉瓧絎︼細6銆佸浗闄呭寲絳栫暐錛堝畬錛?/title><link>http://www.shnenglu.com/lf426/archive/2010/06/26/118788.html</link><dc:creator>lf426</dc:creator><author>lf426</author><pubDate>Sat, 26 Jun 2010 11:55:00 GMT</pubDate><guid>http://www.shnenglu.com/lf426/archive/2010/06/26/118788.html</guid><wfw:comment>http://www.shnenglu.com/lf426/comments/118788.html</wfw:comment><comments>http://www.shnenglu.com/lf426/archive/2010/06/26/118788.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/lf426/comments/commentRss/118788.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/lf426/services/trackbacks/118788.html</trackback:ping><description><![CDATA[<a title="<鏈枃pdf鏂囨。涓嬭澆>" href_cetemp="http://www.163pan.com/files/c0x000k09.html"><鏈枃PDF鏂囨。涓嬭澆></a><br><br>紜紪鐮佺殑紜激<br><br>鎴戜滑鐜板湪鐭ラ亾錛孋/C++鐨勫紿勮漿鎹㈡槸渚濊禆緋葷粺鐨刲ocale鐨勶紝騫朵笖鍦ㄨ繍琛屾椂瀹屾垚銆傝冭檻榪欐牱涓縐嶆儏鍐碉紝鎴戜滑鍦ㄧ畝浣撲腑鏂嘩indows涓嬬紪璇戝涓嬭鍙ワ細<br>const char* s = "涓枃abc";<br>鏍規嵁鎴戜滑涔嬪墠鐨勮璁猴紝緙栬瘧鍣ㄥ皢鎸夌収Windows Codepage936錛圙B2312錛夊榪欎釜瀛楃涓茶繘琛岀紪鐮併傚鏋滄垜浠湪紼嬪簭涓繍琛屽紿勮漿鎹㈠嚱鏁幫紝灝唖杞崲涓哄瀛楃涓瞱s錛屽鏋滆繖涓▼搴忚繍琛屽湪綆浣撲腑鏂囩幆澧冧笅鏄病闂鐨勶紝灝嗘墽琛屼粠GB2312鍒癠CS-2BE鐨勮漿鎹紱浣嗘槸錛屽鏋滃湪鍏朵粬璇█鐜涓嬶紝姣斿鏄箒浣撲腑鏂嘊IG5錛岀▼搴忓皢鏍規嵁緋葷粺鐨刲ocale鎵ц浠嶣IG5鍒癠CS-2BE鐨勮漿鎹紝榪欐樉鐒跺氨鍑虹幇浜嗛敊璇?br><br>琛ユ晳<br><br>鏈夋病鏈夎ˉ鏁戣繖涓棶棰樼殑鍔炴硶鍛紵涓涓В鍐蟲柟妗堝氨鏄墽琛屼笉渚濊禆locale鐨勫紿勮漿鎹€傚疄闄呬笂錛岃繖灝卞凡緇忎笉鏄紿勮漿鎹箣闂寸殑闂浜嗭紝鑰屾槸緙栫爜涔嬮棿杞崲鐨勯棶棰樹簡銆傛垜浠彲浠ョ敤GNU鐨刲ibiconv瀹炵幇浠繪剰緙栫爜闂寸殑杞崲錛屽浜庝互涓婄殑鍏蜂綋鎯呭喌錛屾寚鏄庢槸浠嶨B2312鍒癠CS-2BE灝變笉浼氬嚭閿欍傦紙璇峰弬鑰冩湰浜哄墠闈㈢殑绔犺妭錛?a title=win32涓嬬殑libiconv href="http://www.shnenglu.com/lf426/archive/2008/03/30/45738.html">win32涓嬬殑libiconv</a>錛夛紝浣嗚繖鏄劇劧鏄竴涓鎷欑殑絳栫暐錛氭垜浠湪綆浣撲腑鏂嘩indows涓嬪繀欏諱嬌鐢℅B2312鍒癠CS-2BE鐗堟湰鐨勫紿勮漿鎹㈠嚱鏁幫紱鍒頒簡BIG5鐜涓嬶紝灝卞繀欏婚噸鏂板啓浠嶣IG5鍒癠CS-2BE鐨勫紿勮漿鎹㈠嚱鏁般?br><br>Windows鐨勭瓥鐣?br><br>Windows鐨勭瓥鐣ユ槸娣樻卑浜嗙獎瀛楃涓詫紝騫茶剢鍙敤瀹藉瓧絎︿覆銆傛墍鏈夌殑紜紪鐮佸叏閮ㄥ姞涓婄壒瀹氬畯錛屾瘮濡俆EXT()錛屽鏋滅▼搴忔槸鎵璋揢nicode緙栬瘧錛屽湪緙栬瘧鏃跺氨緲昏瘧涓篣CS2-BE鈥斺擶indows鑷О涓篣nicode緙栫▼錛屽叾鏈川鏄嬌鐢ㄤ簡UCS-2BE鐨?6浣嶅瀛楃涓層?br><br>Linux鐨勭瓥鐣?br><br>Linux涓嬫牴鏈氨涓嶅瓨鍦ㄨ繖涓棶棰橈紒鍥犱負鍚勭璇█鐨凩inux閮戒嬌鐢║TF-8鐨勭紪鐮侊紝鎵浠ワ紝鏃犺緋葷粺locale濡備綍鍙樺寲錛岀獎鍒板杞崲鐨勮鍒欎竴鐩存槸UTF-8鍒癠TF32-BE 銆?br><br>璺ㄥ鉤鍙扮瓥鐣?br><br>鍥犱負鍦?6浣嶇殑鑼冨洿鍐咃紝UTF32-BE鐨勫墠16浣嶄負0錛屽悗16浣嶄笌UCS2-BE鏄竴鏍風殑錛屾墍浠ワ紝鍗充嬌wchar_t鐨剆izeof()涓嶄竴鏍鳳紝鍦ㄤ竴鑸儏鍐典笅錛岃法騫沖彴浣跨敤瀹藉瓧絎︼紙涓詫級涔熷簲璇ユ槸鍏煎鐨勩備絾鏄緷鐒跺瓨鍦ㄦ綔鍦ㄧ殑闂錛屽氨鏄偅浜?瀛楄妭鐨刄TF32緙栫爜銆?br><br>gettext絳栫暐<br><br>浠ヤ笂閮芥槸灝咥SCII鍙婁互澶栫殑緙栫爜紜紪鐮佸湪紼嬪簭涓殑鍔炴硶銆侴NU鐨刧ettext鎻愪緵浜嗗彟澶栦竴縐嶉夋嫨錛氬湪紼嬪簭涓彧紜紪鐮丄SCII錛屽璇█鏀寔鐢眊ettext鍑芥暟搴撳湪榪愯鏃跺姞杞姐傦紙瀵筭ettext鐨勪粙緇嶈鍙傝冩湰浜哄墠闈㈢殑绔犺妭錛?a title=Win32涓嬬殑GetText href="http://www.shnenglu.com/lf426/archive/2008/03/30/45723.html">Win32涓嬬殑GetText</a>錛夈俫ettext鐨勫璇█緲昏瘧鏂囦歡涓嶅湪紼嬪簭涓紝鑰屾槸鍗曠嫭鐨勬彁鍑烘潵鏀懼湪鐗瑰畾鐨勪綅緗俫ettext鏄庣‘鐨勭煡閬撹繖浜涚炕璇戞枃浠剁殑緙栫爜錛屾墍浠ュ彲浠ュ噯紜殑鍛婅瘔緇欑郴緇熺炕璇戠殑姝g‘淇℃伅錛岃岀郴緇熷皢榪欎簺淇℃伅浠ュ綋鍓嶇殑緋葷粺locale緙栫爜鎴愮獎瀛楃涓插弽棣堢粰紼嬪簭銆備緥濡傦紝鍦ㄧ畝浣撲腑鏂嘩indows涓紝gettext鐨刾o鏂囦歡涔熷彲浠ヤ互UTF-8鍌ㄥ瓨錛実ettext灝唒o鏂囦歡緲昏瘧鎴恗o鏂囦歡錛岀‘淇漨o鏂囦歡鍦ㄤ換浣曠郴緇熷拰璇█鐜涓嬮兘鑳藉姝g‘緲昏瘧銆傚湪榪愯鏄紶緇檞in32紼嬪簭鐨勭獎涓茬鍚堝綋鍓峫ocale錛屾槸GB2312銆俫ettext璁╁浗闄呭寲鐨勭炕璇戞洿鍔犵殑鏂逛究錛岀己鐐規槸鐩墠鎴戞病鎵懼埌鏀寔瀹藉瓧絎︿覆鐨勭増鏈紙鎹鏄湁ugettext()鏀寔瀹藉瓧絎︿覆錛夛紝鎵浠ヨ浣跨敤gettext鍙兘浣跨敤紿勫瓧絎︿覆銆備絾鏄痝ettext鍙互杞崲鍒板瀛楃涓詫紝鑰屼笖涓嶄細鍑虹幇瀹界獎杞崲鐨勯棶棰橈紝鍥犱負gettext鏄繍琛屾椂鏍規嵁locale緲昏瘧鐨勩備緥濡傦細<br>const char* s = gettext("Chinese a b c");<br>鍏朵腑"Chinese a b c"鍦╬o涓殑緲昏瘧鏄?涓枃abc"<br>浣跨敤渚濊禆locale鐨勮繍琛屾椂瀹界獎杞崲鍑芥暟錛?br>const std::wstring wstr = s2ws(s);<br>榪愯鏃惰皟鐢ㄨpo鏂囦歡瀵瑰簲鐨刴o鏂囦歡錛屽湪綆浣撲腑鏂囩幆澧冧笅灝變互GB2312浼犵粰紼嬪簭錛屽湪綣佷綋涓枃涓氨浠IG5浼犵粰紼嬪簭錛岃繖鏍穝2ws()鎬昏兘澶熸甯告崲綆楃紪鐮併?br><br>鏇村<br><br>鍦ㄦ湰鏂囩殑鏈鍚庯紝鎴戞兂鍥炲埌C++鐨剆tream闂涓娿傜敤fstream杞崲濡傛鐨勭畝鍗曪紝sstream鍗翠笉鏀寔銆傛敼閫犱竴涓敮鎸乧odecvt鐨剆tring stream闇瑕佹敼閫燽asic_stringbuf銆俠asic_stringbuf鍜宐asic_filebuf閮芥淳鐢熻嚜basic_streambuf錛屾墍涓嶅悓鐨勬槸basic_filebuf鍦ㄦ瀯閫犲拰open()鐨勬椂鍊欒皟鐢ㄤ簡codecvt錛屽彧闇瑕佸湪basic_stringbuf涓坊鍔犺繖涓姛鑳藉氨鍙互浜嗐傝璧鋒潵瀹規槗錛屽疄闄呬笂鏄渶瑕侀噸鏂版敼閫犱竴涓猄TL妯℃澘錛屽敖綆¤繖浜涙ā鏉挎簮浠g爜閮芥槸鍦ㄦ爣鍑嗗簱澶存枃浠朵腑鐜版垚鐨勶紝浣嗘槸鎴戣繕鏄按騫蟲湁闄愶紝娌℃湁鍘繪繁絀朵簡銆傚彟澶栦竴涓濊礬鏄瀯寤轟竴涓熀浜庡唴瀛樻槧灝勭殑铏氭嫙鏂囦歡錛岃繖涓鏋跺湪boost鐨刬ostreams搴撲腑錛屾湁鍏磋叮鐨勬湅鍙嬪彲浠ユ繁鍏ョ殑鐮旂┒銆?br>錛堝畬錛? <img src ="http://www.shnenglu.com/lf426/aggbug/118788.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/lf426/" target="_blank">lf426</a> 2010-06-26 19:55 <a href="http://www.shnenglu.com/lf426/archive/2010/06/26/118788.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>褰誨簳瑙e瘑C++瀹藉瓧絎︼細5銆佸埄鐢╢stream杞崲http://www.shnenglu.com/lf426/archive/2010/06/26/118779.htmllf426lf426Sat, 26 Jun 2010 08:40:00 GMThttp://www.shnenglu.com/lf426/archive/2010/06/26/118779.htmlhttp://www.shnenglu.com/lf426/comments/118779.htmlhttp://www.shnenglu.com/lf426/archive/2010/06/26/118779.html#Feedback0http://www.shnenglu.com/lf426/comments/commentRss/118779.htmlhttp://www.shnenglu.com/lf426/services/trackbacks/118779.html" href_cetemp="http://www.163pan.com/files/c0x000k09.html"><鏈枃PDF鏂囨。涓嬭澆>

C++鐨勬祦鍜屾湰鍦板寲絳栫暐闆?br>
BS鍦ㄨ璁++嫻佺殑鏃跺欏笇鏈涘叾鍏峰鏅鴻兘鍖栵紝騫朵笖鏄彲鎵╁睍鐨勬櫤鑳藉寲錛屼篃灝辨槸璇達紝C++鐨勬祦鍙互“璇繪噦”涓浜涘唴瀹廣傛瘮濡傦細
std::cout << 123 << "ok" << std::endl;
榪欏彞浠g爜涓紝std::cout鏄兘鍒ゆ柇鍑?23鏄痠nt鑰?ok"鏄痗onst char[3]銆傚埄鐢ㄦ祦鐨勬櫤鑳斤紝鐢氳嚦鍙互鍋氫竴浜涘熀紜綾誨瀷鐨勮漿鎹紝姣斿浠巌nt鍒皊tring錛宻tring鍒癷nt錛?br>
std::string str("123");
std::stringstream sstr(str);
int i;
sstr 
>> i;
int i = 123;
std::stringstream sstr;
sstr 
<< i;
std::
string str = sstr.str();
灝界濡傛錛孋++騫朵笉婊¤凍錛孋++鐢氳嚦甯屾湜嫻佽兘“鏄庣櫧”鏃墮棿錛岃揣甯佺殑琛ㄧず娉曘傝屾椂闂村拰璐у竵鐨勮〃紺烘柟娉曞湪涓栫晫鑼冨洿鍐呮槸涓嶅悓鐨勶紝鎵浠ワ紝姣忎竴涓祦閮芥湁鑷繁鐨刲ocale鍦ㄥ獎鍝嶅叾琛屼負錛孋++涓彨鍋氭縺媧伙紙imbue錛屼篃鏈夌炕璇戞垚嫻告煋錛夈傝屾垜浠煡閬擄紝姣忎竴涓猯ocale閮芥湁澶氫釜facet錛岃繖浜沠acet騫墮潪鎬繪槸琚玼se_facet浣跨敤鐨勩傚喅瀹氫嬌鐢ㄥ摢浜沠acet鐨勶紝鏄祦鐨勭紦瀛榖asic_streambuf鍙婂叾媧劇敓綾籦asic_stringbuf鍜宐asic_filebuf銆傛垜浠鐢ㄥ埌鐨刦acet鏄痗odecvt錛岃繖涓猣acet鍙basic_filebuf浣跨敤鈥斺旇繖灝辨槸涓轟粈涔堝彧鑳界敤fstream鏉ュ疄鐜板紿勮漿鎹紝鑰屾棤娉曚嬌鐢╯stream鏉ュ疄鐜扮殑鍘熷洜銆?br>澶存枃浠訛細
//filename string_wstring_fstream.hpp
#ifndef STRING_WSTRING_FSTREAM_HPP
#define STRING_WSTRING_FSTREAM_HPP

#include 
<string>

const std::wstring s2ws(const std::string& s);
const std::string ws2s(const std::wstring& s);

#endif
瀹炵幇錛?br>
#include <string>
#include 
<fstream>
#include 
"string_wstring_fstream.hpp"

const std::wstring s2ws(const std::string& s)
{
    std::locale sys_loc(
"");

    std::ofstream ofs(
"cvt_buf");
    ofs 
<< s;
    ofs.close();

    std::wifstream wifs(
"cvt_buf");
    wifs.imbue(sys_loc);
    std::wstring wstr;
    wifs 
>> wstr;
    wifs.close();

    
return wstr;
}

const std::string ws2s(const std::wstring& s)
{
    std::locale sys_loc(
"");

    std::wofstream wofs(
"cvt_buf");
    wofs.imbue(sys_loc);
    wofs 
<< s;
    wofs.close();

    std::ifstream ifs(
"cvt_buf");
    std::
string str;
    ifs 
>> str;
    ifs.close();

    
return str;
}
鍦ㄧ獎鍒板鐨勮漿鍖栦腑錛屾垜浠厛浣跨敤榛樿鐨勬湰鍦板寲絳栫暐闆嗭紙locale錛夊皢s閫氳繃紿勬枃浠舵祦ofs浼犲叆鏂囦歡錛岃繖鏄痗har鍒癱har鐨勪紶閫掞紝娌℃湁浠諱綍杞崲錛涚劧鍚庢垜浠墦寮瀹芥枃浠舵祦wifs錛屽茍鐢ㄧ郴緇熺殑鏈湴鍖栫瓥鐣ラ泦錛坙ocale錛夊幓嬋媧伙紙imbue錛変箣錛屾祦鍦ㄨ鍥炲涓瞱str鐨勬椂鍊欙紝灝辨槸char鍒皐char_t鐨勮漿鎹紝騫朵笖鍥犱負嬋媧諱簡sys_loc錛屾墍浠ュ疄鐜版爣鍑嗙獎鍒板鐨勮漿鎹€?br>鍦ㄥ鍒扮獎鐨勮漿鍖栦腑錛屾垜浠厛鎵撳紑鐨勬槸瀹芥枃浠舵祦wofs錛屽茍涓旂敤緋葷粺鐨勬湰鍦板寲絳栫暐闆唖ys_loc嬋媧伙紙imbue錛変箣錛岃繖鏃跺欙紝鍥犱負瑕佸啓鐨勬枃浠禼vt_buf鏄竴涓閮ㄧ紪鐮侊紝鎵浠ユ墽琛屼簡浠巜char_t鍒癱har鐨勬爣鍑嗚漿鎹€傝鍥炴潵鐨勬枃浠舵祦浠巆har鍒癱har錛屼笉鍋氫換浣曡漿鎹€?

lf426 2010-06-26 16:40 鍙戣〃璇勮
]]>
褰誨簳瑙e瘑C++瀹藉瓧絎︼細4銆佸埄鐢╟odecvt鍜寀se_facet杞崲http://www.shnenglu.com/lf426/archive/2010/06/26/118772.htmllf426lf426Sat, 26 Jun 2010 05:39:00 GMThttp://www.shnenglu.com/lf426/archive/2010/06/26/118772.htmlhttp://www.shnenglu.com/lf426/comments/118772.htmlhttp://www.shnenglu.com/lf426/archive/2010/06/26/118772.html#Feedback2http://www.shnenglu.com/lf426/comments/commentRss/118772.htmlhttp://www.shnenglu.com/lf426/services/trackbacks/118772.html" href_cetemp="http://www.163pan.com/files/c0x000k09.html"><鏈枃PDF鏂囨。涓嬭澆>

locale鍜宖acet

C++鐨刲ocale妗嗘灦姣擟鏇村畬澶囥侰++闄や簡涓涓緇熸湰鍦扮瓥鐣ラ泦locale錛岃繕鍙互涓簂ocale鎸囧畾鍏蜂綋鐨勭瓥鐣acet錛岀敋鑷沖彲浠ョ敤鑷繁瀹氫箟鐨刦acet鍘繪敼閫犱竴涓幇鏈夌殑locale浜х敓涓涓柊鐨刲ocale銆傚鏋滄湁涓涓猣acet綾籒ewFacet闇瑕佹坊鍔犲埌鏌愪釜old_loc涓艦鎴愭柊new_loc錛岄渶瑕佸彟澶栦竴涓瀯閫犲嚱鏁幫紝閫氬父鐨勫仛娉曟槸錛?br>std::locale new_loc(old_loc, new NewFacet);
鏍囧噯搴撻噷鐨勬爣鍑唂acet閮藉叿鏈夎嚜宸辯壒鏈夌殑鍔熻兘錛岃闂竴涓猯ocale瀵硅薄涓壒瀹氱殑facet闇瑕佷嬌鐢ㄦā鏉垮嚱鏁皍se_facet錛?br>template <class Facet> const Facet& use_factet(const locale&);
鎹竴縐嶈娉曪紝use_facet鎶婁竴涓猣acet綾誨疄渚嬪寲鎴愪簡瀵硅薄錛岀敱姝ゅ氨鍙互浣跨敤榪欎釜facet瀵硅薄鐨勬垚鍛樺嚱鏁般?br>
codecvt

codecvt灝辨槸涓涓爣鍑唂acet銆傚湪C++鐨勮璁℃鏋墮噷錛岃繖鏄竴涓氱敤鐨勪唬鐮佽漿鎹㈡ā鏉庫斺斾篃灝辨槸璇達紝騫朵笉鏄粎浠呬負瀹界獎杞崲鍒跺畾鐨勩?br>templat <class I, class E, class State> class std::codecvt: public locale, public codecvt_base{...};
I琛ㄧず鍐呴儴緙栫爜錛孍琛ㄧず澶栭儴緙栫爜錛孲tate鏄笉鍚岃漿鎹㈡柟寮忕殑鏍囪瘑錛屽鏋滃畾涔夊涓嬬被鍨嬶細
typedef std::codecvt<wchar_t, char, mbstate_t> CodecvtFacet;
閭d箞CodecvtFacet灝辨槸涓涓爣鍑嗙殑瀹界獎杞崲facet錛屽叾涓璵bstate_t鏄爣鍑嗗紿勮漿鎹㈢殑State銆?br>
鍐呴儴緙栫爜鍜屽閮ㄧ紪鐮?br>
鎴戜滑鑰冭檻絎?鑺備腑鎻愬埌鐨凜++緙栬瘧鍣ㄨ鍙栨簮鏂囦歡鏃跺欑殑鎯呭艦錛屽綋璇誨埌L"涓枃abc"鐨勬椂鍊欙紝澶栭儴緙栫爜錛屼篃灝辨槸婧愭枃浠剁殑緙栫爜錛屾槸GB2312鎴栬匲TF-8鐨刢har錛岃岀紪璇戝櫒蹇呴』灝嗗叾緲昏瘧涓篣CS-2BE鎴栬匲TF-32BE鐨剋char_t錛岃繖涔熷氨鏄▼搴忕殑鍐呴儴緙栫爜銆傚鏋滀笉鏄瀛楃涓詫紝鍐呭緙栫爜閮芥槸char錛屼篃灝變笉闇瑕佽漿鎹簡銆傜被浼肩殑錛屽綋C++璇誨啓鏂囦歡鐨勬椂鍊?錛屽氨浼氬彲鑳介渶瑕佸埌鍐呭緙栫爜杞崲銆備簨瀹炰笂錛宑odecvt灝辨鏄鏂囦歡嫻佺紦瀛榖asic_filebuf鎵浣跨敤鐨勩傜悊瑙h繖涓鐐瑰緢閲嶈錛屽師鍥犱細鍦ㄤ笅涓灝忚妭鐪嬪埌銆?br>
CodecvtFacet鐨刬n()鍜宱ut()
鍥犱負鍦–odecvtFacet涓紝鍐呴儴緙栫爜璁劇疆涓簑char_t錛屽閮ㄧ紪鐮佽緗負char錛岃漿鎹㈡ā寮忔槸鏍囧噯瀹界獎杞崲mbstate_t錛屾墍浠ワ紝綾繪柟娉昳n()灝辨槸浠巆har鏍囧噯杞崲鍒皐char_t錛宱ut()灝辨槸浠巜char_t鏍囧噯杞崲鍒癱har銆傝繖灝辨垚浜嗘垜浠闇瑕佺殑鍐呭杞崲鍑芥暟銆?br>result in(State& s, const E* from, const E* from_end, const E*& from_next, I* to,  I* to_end, I*& to_next) const;
result out(State& s, const I* from, const I* from_end, const I*& from_next, E* to, E* to_end, E*& to_next) const;
鍏朵腑錛宻鏄潪const寮曠敤錛屼繚瀛樼潃杞崲浣嶇Щ鐘舵佷俊鎭傝繖閲岄渶瑕侀噸鐐瑰己璋冪殑鏄紝鍥犱負杞崲鐨勫疄闄呭伐浣滀氦緇欎簡榪愯鏃跺簱錛屼篃灝辨槸璇達紝杞崲鍙兘涓嶆槸鍦ㄧ▼搴忕殑涓昏繘紼嬩腑瀹屾垚鐨勶紝鑰岃漿鎹㈠伐浣滀緷璧栦簬鏌ヨs鐨勫鹼紝鍥犳錛屽鏋渟鍦ㄨ漿鎹㈢粨鏉熷墠鏋愭瀯錛屽氨鍙兘鎶涘嚭榪愯鏃跺紓甯搞傛墍浠ワ紝鏈瀹夊叏鐨勫姙娉曟槸錛屽皢s璁劇疆涓哄叏灞鍙橀噺錛?br>const鐨?涓寚閽堝垎鍒槸寰呰漿鎹㈠瓧絎︿覆鐨勮搗鐐癸紝緇堢偣錛屽拰鍑虹幇閿欒鏃跺欑殑鍋滅偣錛堢殑涓嬩竴涓綅緗級錛涘彟澶?涓寚閽堟槸杞崲鐩爣瀛楃涓茬殑璧風偣錛岀粓鐐逛互鍙婂嚭鐜伴敊璇椂鍊欑殑鍋滅偣錛堢殑涓嬩竴涓綅緗級銆?br>
浠g爜濡備笅錛?br>澶存枃浠?br>
//Filename string_wstring_cppcvt.hpp

#ifndef STRING_WSTRING_CPPCVT_HPP
#define STRING_WSTRING_CPPCVT_HPP

#include 
<iostream>
#include 
<string>

const std::wstring s2ws(const std::string& s);
const std::string ws2s(const std::wstring& s);

#endif
瀹炵幇錛?br>
#include "string_wstring_cppcvt.hpp"

mbstate_t in_cvt_state;
mbstate_t out_cvt_state;

const std::wstring s2ws(const std::string& s)
{
    std::locale sys_loc(
"");

    
const char* src_str = s.c_str();
    
const size_t BUFFER_SIZE = s.size() + 1;

    wchar_t
* intern_buffer = new wchar_t[BUFFER_SIZE];
    wmemset(intern_buffer, 
0, BUFFER_SIZE);

    
const char* extern_from = src_str;
    
const char* extern_from_end = extern_from + s.size();
    
const char* extern_from_next = 0;
    wchar_t
* intern_to = intern_buffer;
    wchar_t
* intern_to_end = intern_to + BUFFER_SIZE;
    wchar_t
* intern_to_next = 0;

    typedef std::codecvt
<wchar_t, char, mbstate_t> CodecvtFacet;

    CodecvtFacet::result cvt_rst 
=
        std::use_facet
<CodecvtFacet>(sys_loc).in(
            in_cvt_state,
            extern_from, extern_from_end, extern_from_next,
            intern_to, intern_to_end, intern_to_next);
    
if (cvt_rst != CodecvtFacet::ok) {
        
switch(cvt_rst) {
            
case CodecvtFacet::partial:
                std::cerr 
<< "partial";
                
break;
            
case CodecvtFacet::error:
                std::cerr 
<< "error";
                
break;
            
case CodecvtFacet::noconv:
                std::cerr 
<< "noconv";
                
break;
            
default:
                std::cerr 
<< "unknown";
        }
        std::cerr    
<< ", please check in_cvt_state."
                    
<< std::endl;
    }
    std::wstring result 
= intern_buffer;

    delete []intern_buffer;

    
return result;
}

const std::string ws2s(const std::wstring& ws)
{
    std::locale sys_loc(
"");

    
const wchar_t* src_wstr = ws.c_str();
    
const size_t MAX_UNICODE_BYTES = 4;
    
const size_t BUFFER_SIZE =
                ws.size() 
* MAX_UNICODE_BYTES + 1;

    
char* extern_buffer = new char[BUFFER_SIZE];
    memset(extern_buffer, 
0, BUFFER_SIZE);

    
const wchar_t* intern_from = src_wstr;
    
const wchar_t* intern_from_end = intern_from + ws.size();
    
const wchar_t* intern_from_next = 0;
    
char* extern_to = extern_buffer;
    
char* extern_to_end = extern_to + BUFFER_SIZE;
    
char* extern_to_next = 0;

    typedef std::codecvt
<wchar_t, char, mbstate_t> CodecvtFacet;

    CodecvtFacet::result cvt_rst 
=
        std::use_facet
<CodecvtFacet>(sys_loc).out(
            out_cvt_state,
            intern_from, intern_from_end, intern_from_next,
            extern_to, extern_to_end, extern_to_next);
    
if (cvt_rst != CodecvtFacet::ok) {
        
switch(cvt_rst) {
            
case CodecvtFacet::partial:
                std::cerr 
<< "partial";
                
break;
            
case CodecvtFacet::error:
                std::cerr 
<< "error";
                
break;
            
case CodecvtFacet::noconv:
                std::cerr 
<< "noconv";
                
break;
            
default:
                std::cerr 
<< "unknown";
        }
        std::cerr    
<< ", please check out_cvt_state."
                    
<< std::endl;
    }
    std::
string result = extern_buffer;

    delete []extern_buffer;

    
return result;
}
鏈鍚庤ˉ鍏呰鏄庝竴涓媠td::use_facet<CodecvtFacet>(sys_loc).in()鍜宻td::use_facet<CodecvtFacet>(sys_loc).out()銆俿ys_loc鏄郴緇熺殑locale錛岃繖涓猯ocale涓氨鍖呭惈鐫鐗瑰畾鐨刢odecvt facet錛屾垜浠凡緇弔ypedef涓轟簡CodecvtFacet銆傜敤use_facet瀵笴odecvtFacet榪涜浜嗗疄渚嬪寲錛屾墍浠ュ彲浠ヤ嬌鐢ㄨ繖涓猣acet鐨勬柟娉昳n()鍜宱ut()銆?

lf426 2010-06-26 13:39 鍙戣〃璇勮
]]>
褰誨簳瑙e瘑C++瀹藉瓧絎︼細3銆佸埄鐢–榪愯鏃跺簱鍑芥暟杞崲http://www.shnenglu.com/lf426/archive/2010/06/26/118762.htmllf426lf426Sat, 26 Jun 2010 03:17:00 GMThttp://www.shnenglu.com/lf426/archive/2010/06/26/118762.htmlhttp://www.shnenglu.com/lf426/comments/118762.htmlhttp://www.shnenglu.com/lf426/archive/2010/06/26/118762.html#Feedback1http://www.shnenglu.com/lf426/comments/commentRss/118762.htmlhttp://www.shnenglu.com/lf426/services/trackbacks/118762.html" href_cetemp="http://www.163pan.com/files/c0x000k09.html"><鏈枃PDF鏂囨。涓嬭澆>

std::locale

閫氳繃鍓嶉潰涓よ妭鐨勭煡璇嗭紝鎴戜滑鐭ラ亾浜嗗湪C/C++涓紝瀛楃錛堜覆錛夊拰瀹藉瓧絎︼紙涓詫級涔嬮棿鐨勮漿鎹笉鏄畝鍗曠殑錛屽浐瀹氱殑鏁板鍏崇郴錛屽紿勮漿鎹緷璧栦簬鏈湴鍖栫瓥鐣ラ泦錛坙ocale錛夈傛崲鍙ヨ瘽璇達紝涓涓▼搴忓湪榪愯涔嬪墠騫朵笉鐭ラ亾緋葷粺鐨勬湰鍦板寲絳栫暐闆嗘槸浠涔堬紝紼嬪簭鍙湁鍦ㄨ繍琛屼箣鍚庢墠閫氳繃locale鑾峰緱褰撴椂鐨勬湰鍦板寲絳栫暐闆嗐?br>C鏈夎嚜宸辯殑locale鍑芥暟錛屾垜浠繖閲岀洿鎺ヤ粙緇岰++鐨刲ocale綾匯?br>鍏堣璁簂ocale鐨勬瀯閫犲嚱鏁幫細
locale() throw();
榪欎釜鏋勯犲嚱鏁版槸鑾峰緱褰撳墠紼嬪簭鐨刲ocale錛岀敤娉曞涓嬶細
std::locale app_loc = std::locale();
鎴栬咃紙榪欐槸鏋勯犲璞$殑涓ょ琛ㄧず鏂瑰紡錛屽悗鍚岋級
std::locale app_loc;
鍙﹀涓涓瀯閫犲嚱鏁版槸錛?br>explicit locale(const char* name);
榪欎釜鏋勯犲嚱鏁頒互name鐨勫悕瀛楀垱寤烘柊鐨刲ocale銆傞噸瑕佺殑locale瀵硅薄鏈夛細
std::locale sys_loc("");      //鑾峰緱褰撳墠緋葷粺鐜鐨刲ocale
std::locale C_loc("C");      鎴栬?nbsp;     std::locale C_loc = std::locale::classic();      //鑾峰緱C瀹氫箟locale
std::locale old_loc = std::locale::global(new_loc);      //灝唍ew_loc璁劇疆涓哄綋鍓嶅叏灞locale錛屽茍灝嗗師鏉ョ殑locale榪斿洖緇檕ld_loc
闄や簡榪欎簺錛屽叾瀹冪殑name鍏蜂綋鍚嶅瓧渚濊禆浜嶤++緙栬瘧鍣ㄥ拰鎿嶄綔緋葷粺錛屾瘮濡侺inux涓媑cc涓枃緋葷粺鐨刲ocale鍚嶅瓧涓?zh_CN.UTF-8"錛屼腑鏂嘩indows鍙互鐢?chs"錛堟洿鍔犲畬鏁寸殑鍚嶅瓧鍙互鐢╪ame()鍑芥暟鏌ョ湅錛夈?br>
mbstowcs()鍜寃cstombs()

榪欎袱涓狢榪愯鏃跺簱鍑芥暟渚濊禆浜庡叏灞locale榪涜杞崲錛屾墍浠ワ紝浣跨敤鍓嶅繀欏誨厛璁劇疆鍏ㄥ眬locale銆?br>std::locale宸茬粡鍖呭惈鍦?lt;iostream>涓簡錛屽啀鍔犱笂鎴戜滑闇瑕佺敤鍒扮殑C++瀛楃涓詫紝鎵浠ュ寘鍚?lt;string>銆?br>鎴戜滑鍏堢湅紿勫埌瀹界殑杞崲鍑芥暟錛?br>
const std::wstring s2ws(const std::string& s)
{
    std::locale old_loc 
=
        std::locale::global(std::locale(
""));

    
const char* src_str = s.c_str();
    
const size_t buffer_size = s.size() + 1;
    wchar_t
* dst_wstr = new wchar_t[buffer_size];
    wmemset(dst_wstr, 
0, buffer_size);
    mbstowcs(dst_wstr, src_str, buffer_size);
    std::wstring result 
= dst_wstr;
    delete []dst_wstr;

    std::locale::global(old_loc);

    
return result;
}
鎴戜滑灝嗗叏灞locale璁劇疆涓虹郴緇焞ocale錛屽茍淇濆瓨鍘熸潵鐨勫叏灞locale鍦╫ld_loc涓?br>鍦ㄥ埗瀹氳漿鎹㈢┖闂寸紦瀛樺ぇ灝忕殑鏃跺欙紝鑰冭檻濡備笅錛歝har鏄敤1涓垨澶氫釜瀵硅薄錛屼篃灝辨槸1涓垨鑰呭涓瓧鑺傛潵琛ㄧず鍚勭絎﹀彿錛氭瘮濡傦紝GB2312鐢?涓瓧鑺傝〃紺烘暟瀛楀拰瀛楁瘝錛?涓瓧鑺傝〃紺烘眽瀛楋紱UTF-8鐢ㄤ竴涓瓧鑺傝〃紺烘暟瀛楀拰瀛楁瘝錛?涓瓧鑺傝〃紺烘眽瀛楋紝4涓瓧鑺傝〃紺轟竴浜涘緢灝戠敤鍒扮殑絎﹀彿錛屾瘮濡傞煶涔愪腑G澶ц皟絎﹀彿絳夈倃char_t鏄敤1涓璞★紙2瀛楄妭鎴栬?瀛楄妭錛夋潵琛ㄧず鍚勭絎﹀彿銆傚洜姝わ紝琛ㄧず鍚屾牱鐨勫瓧絎︿覆錛屽瀛楃涓茬殑澶у皬錛堜篃灝辨槸wchar_t瀵硅薄鐨勬暟閲忥級鎬繪槸灝忎簬鎴栬呯瓑浜庣獎瀛楃涓插ぇ灝忥紙char瀵硅薄鏁伴噺錛夌殑銆?1鏄負浜嗗湪鏈鍚庨鐣欎竴涓間負0鐨勫璞★紝浠ヤ究璁〤椋庢牸鐨刢har鎴栬厀char_t瀛楃涓茶嚜鍔ㄦ埅鏂斺旇繖褰撶劧鏄涓插ぇ灝忕瓑浜庣獎涓插ぇ灝忕殑鏃跺欐墠浼氱敤涓婄殑錛屽ぇ閮ㄥ垎鏃跺欙紝瀛楃涓叉棭鍦ㄥ墠闈㈡煇涓漿鎹㈠畬姣曠殑浣嶇疆灝辮0鍊煎璞℃墍鎴柇浜嗐?br>鏈鍚庢垜浠皢鍏ㄥ眬locale璁劇疆鍥炲師鏉ョ殑old_loc銆?br>紿勪覆鍒板涓茬殑杞崲鍑芥暟錛?br>
const std::string ws2s(const std::wstring& ws)
{
    std::locale old_loc 
=
        std::locale::global(std::locale(
""));

    
const wchar_t* src_wstr = ws.c_str();
    size_t buffer_size 
= ws.size() * 4 + 1;
    
char* dst_str = new char[buffer_size];
    memset(dst_str, 
0, buffer_size);
    wcstombs(dst_str ,src_wstr, buffer_size);
    std::
string result = dst_str;
    delete []dst_str;

    std::locale::global(old_loc);

    
return result;
}
榪欓噷鑰冭檻杞崲絀洪棿緙撳瓨澶у皬鐨勭瓥鐣ユ濂界浉鍙嶏紝鍦ㄦ渶鏋佺鐨勬儏鍐典笅錛屾墍鏈夌殑wchar_t閮介渶瑕?涓猚har鏉ヨ〃紺猴紝鎵浠ユ渶澶х殑鍙兘灝辨槸4鍊嶅姞1銆?br>榪欎袱涓嚱鏁板湪VC鍜実cc涓兘鑳芥甯歌繍琛岋紙MinGW鍥犱負鍓嶉潰璇村埌鐨勫師鍥犱笉鏀寔瀹藉瓧絎︾殑姝e父浣跨敤錛夛紝鍦╒C涓細緇欏嚭涓嶅畨鍏ㄧ殑璀﹀憡錛岃繖鏄憡璇夌粰閭d簺寮勪笉娓呭紿勮漿鎹㈠疄璐ㄧ殑浜虹殑璀﹀憡錛屽浜庝簡瑙e埌鐩墠榪欎簺鐭ヨ瘑鐨勪綘鎴戞潵璇達紝榪欏氨鏄暟鍡︿簡銆?

lf426 2010-06-26 11:17 鍙戣〃璇勮
]]>
褰誨簳瑙e瘑C++瀹藉瓧絎︼細2銆乁nicode鍜孶TFhttp://www.shnenglu.com/lf426/archive/2010/06/25/118739.htmllf426lf426Fri, 25 Jun 2010 13:51:00 GMThttp://www.shnenglu.com/lf426/archive/2010/06/25/118739.htmlhttp://www.shnenglu.com/lf426/comments/118739.htmlhttp://www.shnenglu.com/lf426/archive/2010/06/25/118739.html#Feedback1http://www.shnenglu.com/lf426/comments/commentRss/118739.htmlhttp://www.shnenglu.com/lf426/services/trackbacks/118739.html" href_cetemp="http://www.163pan.com/files/c0x000k09.html"><鏈枃PDF鏂囨。涓嬭澆>

Unicode鍜孶CS

Unicode鍜孶CS鏄袱涓嫭绔嬬殑緇勭粐鍒嗗埆鍒跺畾鐨勪竴濂楃紪鐮佹爣鍑嗭紝浣嗘槸鍥犱負鍘嗗彶鐨勫師鍥狅紝榪欎袱濂楁爣鍑嗘槸瀹屽叏涓鏍風殑銆俇nicode榪欎釜璇嶇敤寰楁瘮杈冨鐨勫師鍥犲彲鑳芥槸鍥犱負姣旇緝瀹規槗璁頒綇錛屽鏋滄病鏈夌壒鍒殑澹版槑錛屽湪鏈枃鎵鎻愬強鐨刄nicode鍜孶CS灝辨槸涓涓剰鎬濄俇nicode鐨勭洰鏍囨槸寤虹珛涓濂楀彲浠ュ寘鍚漢綾繪墍鏈夎璦鏂囧瓧絎﹀彿浣犳兂寰楀埌鎯充笉鍒扮殑鍚勭涓滆タ鐨勭紪鐮侊紝鍏剁紪鐮佸閲忕敋鑷抽鐣欎簡鐏槦璇互鍙婇摱娌崇郴浠ュ璇█鐨勭┖闂粹斺斿紑涓帺絎戯紝鍙嶆綆鍗曠殑璇達紝Unicode緙栫爜闆嗚凍澶熺殑澶э紝濡傛灉鐢ㄨ綆楁満鍗曚綅鏉ヨ〃紺猴紝鍏舵暟閲忔瘮3涓瓧鑺傚ぇ涓浜涳紝涓嶅埌4涓瓧鑺傘?br>
Unicode鍜孶TF

鍥犱負Unicode鍖呭惈鐨勫唴瀹瑰お澶氾紝鍏剁紪鐮佸湪璁$畻鏈轟腑鐨勮〃紺烘柟娉曞氨鎴愪負浜嗕竴涓湁蹇呰鐮旂┒鐨勯棶棰樸備紶緇熺紪鐮侊紝姣斿鏍囧噯鐨?浣岮SCII錛屽湪璁$畻鏈轟腑鐨勮〃紺烘柟娉曞氨鏄崰涓涓瓧鑺傜殑鍚?浣嶏紝榪欎技涔庢槸涓嶉渶瑕佽В閲婂氨絎﹀悎澶у涔犳儻鐨勮〃紺烘柟娉曘備絾鏄綋浠奤nicode鐨勬繪暟杈懼埌32浣嶏紙璁$畻鏈虹殑鏈灝忓崟浣嶆槸瀛楄妭錛屾墍浠ュぇ浜?瀛楄妭錛屽氨鍙兘鑷沖皯鐢?瀛楄妭琛ㄧず錛夛紝瀵逛簬澶ч儴鍒嗗父鐢ㄥ瓧絎︼紝姣斿Unicode緙栫爜鍙崰涓涓瓧鑺傚ぇ灝忕殑鑻辮瀛楁瘝錛屽崰涓や釜瀛楄妭澶у皬姹夊瓧錛岄兘鐢?涓瓧鑺傛潵鍌ㄥ瓨澶ア渚堜簡銆傚彟澶栵紝濡傛灉閮界敤4瀛楄妭鐩存帴琛ㄧず錛屽氨涓嶅彲閬垮厤鐨勫嚭鐜頒負0鐨勫瓧鑺傘傝屾垜浠煡閬擄紝鍦–璇█涓紝0x00鐨勫瓧鑺傚氨鏄?\0'錛岃〃紺虹殑鏄竴涓瓧絎︿覆錛坈har瀛楃涓詫紝闈瀢char_t錛夌殑緇撴潫錛屾崲鍙ヨ瘽璇達紝C椋庢牸鐨刢har瀛楃涓叉棤娉曡〃紺篣nicode銆?br>鍥犱負綾諱技鐨勭縐嶉棶棰橈紝涓篣nicode鍦ㄨ綆楁満涓殑緙栫爜鏂規硶鍑虹幇浜嗭紝榪欏氨鏄疷TF錛涙墍瀵瑰簲鐨勶紝涓篣CS緙栫爜瀹炵幇鐨勬柟寮忎篃鏈夎嚜宸辯殑璇存硶銆備竴鑸潵璇達紝UTF-x錛寈琛ㄧず榪欏緙栫爜涓涓崟浣嶈嚦灝戝崰鐢▁浣嶏紝鍥犱負Unicode鏈闀胯揪鍒?2浣嶏紝鎵浠TF-x閫氬父鏄彉闀跨殑鈥斺旈櫎浜哢TF-32錛涜孶CS-y琛ㄧず涓涓崟浣嶅氨鍗犵敤y涓瓧鑺傦紝鎵浠ヨ兘琛ㄧず褰撲粖Unicode鐨刄CS-y鍙湁UCS-4錛屼絾鏄洜涓哄巻鍙茬殑鍘熷洜錛屽綋Unicode榪樻病閭d箞搴炲ぇ鐨勬椂鍊欙紝2涓瓧鑺傝凍澶熻〃紺猴紝鎵浠ユ湁UCS-2錛岀幇鍦ㄧ湅鏉ワ紝UCS-2鎵鑳借〃紺虹殑Unicode鍙槸褰撲粖Unicode鐨勪竴涓瓙闆嗐?br>涔熷氨鏄錛屽鏋滄煇縐嶇紪鐮侊紝鑳芥牴鎹竴瀹氱殑瑙勫垯綆楁硶錛屽緱鍒癠nicode緙栫爜錛岄偅涔堣繖縐嶇紪鐮佹柟寮忓氨鍙互縐頒箣涓篣TF銆?br>
UTF-8鍜學indows GB2312

UTF-8鏄竴濂?#8220;鑱槑”鐨勭紪鐮侊紝鍙兘鐢?錛?錛?錛?涓瓧鑺傝〃紺恒傞氳繃UTF-8鐨勭畻娉曪紝姣忎竴涓瓧鑺傝〃紺虹殑淇℃伅閮藉緢鏄庣‘錛氳繖鏄笉鏄煇涓猆nicode緙栫爜鐨勭涓涓瓧鑺傦紱濡傛灉鏄涓涓瓧鑺傦紝榪欐槸涓涓嚑浣峌nicode緙栫爜銆傝繖縐?#8220;鑱槑”琚О涓篣TF-8鐨勮嚜鎴戝悓姝ワ紝涔熸槸UTF-8鎴愪負緗戠粶浼犺緭鏍囧噯緙栫爜鐨勫師鍥犮?br>鍙﹀錛孶TF-8涔熶笉浼氬嚭鐜?瀛楄妭錛屾墍浠ュ彲浠ヨ〃紺轟負char瀛楃涓詫紝鎵浠ュ彲浠ユ垚涓虹郴緇熺殑緙栫爜銆侺inux緋葷粺榛樿浣跨敤UTF-8緙栫爜銆?br>Windows GB2312涓鑸嚜縐頒負GB2312錛屽叾瀹炵湡姝g殑鍚嶅瓧搴旇鏄疻indows Codepage 936錛岃繖涔熸槸涓縐嶅彉闀跨殑緙栫爜錛?涓瓧鑺傝〃紺轟紶緇熺殑ASCII閮ㄥ垎錛涙眽瀛楅儴鍒嗘槸涓や釜瀛楄妭鐨凣BK錛堝浗鏍囨墿錛堝睍錛夛紝鎷奸煶澹版瘝錛夈侰odepage 936涔熷彲浠ヨ〃紺轟負char瀛楃涓詫紝鏄腑鏂嘩indows緋葷粺鐨勯粯璁ょ紪鐮併?br>鎴戜滑鍦ㄧ1鑺備腑鐪嬪埌鐨?br>const char* s = "涓枃abc";
鍦╓indows涓殑緙栫爜灝辨槸Codepage 936錛涘湪Linux涓殑緙栫爜灝辨槸UTF-8銆?br>闇瑕佹敞鎰忕殑鏄紝Codepage 936涓嶅儚UTF錛岃窡Unicode娌℃湁鎹㈢畻鐨勫叧緋伙紝鎵浠ュ彧鑳介氳繃“浠g爜欏?#8221;鎶鏈煡琛ㄥ搴斻?br>
UTF-16鍜孶CS-2

UTF-16鐢?涓瓧鑺傛垨鑰?涓瓧鑺傝〃紺恒傚湪2涓瓧鑺傚ぇ灝忕殑鏃跺欙紝璺烾CS-2鏄竴鏍風殑銆俇TF-16涓嶅儚UTF-8錛屾病鏈夎嚜鎴戝悓姝ユ満鍒訛紝鎵浠ワ紝緙栫爜澶т綅鍦ㄥ墠榪樻槸灝忎綅鍦ㄥ墠錛屽氨鎴愪簡瑙佷粊瑙佹櫤鐨勯棶棰樸傛垜浠湪絎?鑺備腑錛?#8220;涓?#8221;鐨刄CS-2BE錛堝洜涓烘槸涓や釜瀛楄妭錛屾墍浠ヤ篃灝辨槸UTF-16BE錛夌紪鐮佹槸0x4E2D錛岃繖閲岀殑BE灝辨槸澶т綅鍦ㄥ悗鐨勬剰鎬濓紙涔熷氨鏄皬浣嶅湪鍓嶄簡錛夛紝瀵瑰簲鐨勶紝濡傛灉鏄疷CS-2LE錛岀紪鐮佸氨鎴愪簡0x2D4E銆?br>Windows涓殑wchar_t灝辨槸閲囩敤UCS-2BE緙栫爜銆傞渶瑕佹寚鍑虹殑鏄紝C++鏍囧噯涓wchar_t鐨勮姹傛槸瑕佽兘琛ㄧず鎵鏈夌郴緇熻兘璇嗗埆鐨勫瓧絎︺俉indows鑷О鏀寔Unicode錛屼絾鏄叾wchar_t鍗翠笉鑳借〃紺烘墍鏈夌殑Unicode錛岀敱姝よ繚鑳屼簡C++鏍囧噯銆?br>
UTF-32鍜孶CS-4

UTF-32鍦ㄧ洰鍓嶉樁孌電瓑浠蜂簬UCS-4錛岄兘鐢ㄥ畾闀跨殑4涓瓧鑺傝〃紺恒俇TF-32鍚屾牱瀛樺湪BE鍜孡E鐨勯棶棰樸侺inux鐨剋char_t緙栫爜灝辨槸UTF-32BE銆傚湪16浣嶄互鍐呯殑鏃跺欙紝UTF-32BE鐨勫悗涓や綅錛堝墠涓や綅鏄?x00 0x00錛夌瓑浠蜂簬UTF-16BE涔熷氨絳変環浜嶶CS-2BE

BOM

涓轟簡璇存槑涓涓枃浠墮噰鐢ㄧ殑鏄粈涔堢紪鐮侊紝鍦ㄦ枃浠舵渶寮濮嬬殑閮ㄥ垎錛屽彲浠ユ湁BOM錛屾瘮濡?xFE 0xFF琛ㄧずUTF-16BE錛?xFF 0xFE 0x00 0x00琛ㄧずUTF-32LE銆俇TF-8鍘熸湰鏄笉闇瑕丅OM鐨勶紝鍥犱負鍏惰嚜鎴戝悓姝ョ殑鐗規э紝浣嗘槸涓轟簡鏄庣‘璇存槑榪欐槸UTF-8錛堣屼笉鏄鏂囨湰緙栬緫鍣ㄥ幓鐚滐級錛屼篃鍙互鍔犱笂UTF-8鐨凚OM錛?xEF 0xBB 0xBF

浠ヤ笂鍐呭閮借榪板緱寰堟鐣ワ紝璇︾粏淇℃伅璇鋒煡闃呯淮鍩虹櫨縐戠浉鍏沖唴瀹廣?

lf426 2010-06-25 21:51 鍙戣〃璇勮
]]>
褰誨簳瑙e瘑C++瀹藉瓧絎︼細1銆佷粠char鍒皐char_thttp://www.shnenglu.com/lf426/archive/2010/06/25/118707.htmllf426lf426Fri, 25 Jun 2010 06:41:00 GMThttp://www.shnenglu.com/lf426/archive/2010/06/25/118707.htmlhttp://www.shnenglu.com/lf426/comments/118707.htmlhttp://www.shnenglu.com/lf426/archive/2010/06/25/118707.html#Feedback6http://www.shnenglu.com/lf426/comments/commentRss/118707.htmlhttp://www.shnenglu.com/lf426/services/trackbacks/118707.html" href_cetemp="http://www.163pan.com/files/c0x000k09.html"><鏈枃PDF鏂囨。涓嬭澆>

“榪欎釜闂姣斾綘鎯寵薄涓鏉?#8221;
錛堟垜涔熷涓婤S鐨勯鏍鹼紝铏界劧榪欏彞璇濇槸鎴戣嚜宸變復鏃舵兂璇寸殑銆俕^錛?br>
浠庡瓧絎﹀埌鏁存暟

char鏄竴縐嶆暣鏁扮被鍨嬶紝榪欏彞璇濈殑鍚箟鏄紝char鎵鑳借〃紺虹殑瀛楃鍦–/C++涓兘鏄暣鏁扮被鍨嬨傚ソ錛屾帴涓嬫潵錛屽緢澶氭枃绔犲氨浼氫婦鍑轟竴涓吀鍨嬩緥瀛愶紝姣斿錛?a'鐨勬暟鍊煎氨鏄?x61銆傝繖縐嶈娉曞鍚楋紵濡傛灉浣犵粏蹇冪殑璇昏繃K&R鍜孊S瀵逛簬C鍜孋++鎻忚堪鐨勫師钁楋紝浣犲氨浼氶┈涓婂弽椹抽亾錛?x61鍙槸'a'鐨凙SCII鍊鹼紝騫舵病鏈変換浣曡瀹欳/C++鐨刢har鍊煎繀欏誨搴擜SCII銆侰/C++鐢氳嚦娌℃湁瑙勫畾char鍗犲嚑浣嶏紝鍙槸瑙勫畾浜唖izeof(char)絳変簬1銆?br>褰撶劧錛岀洰鍓嶅ぇ閮ㄥ垎鎯呭喌涓嬶紝char鏄?浣嶇殑錛屽茍涓旓紝鍦ˋSCII鑼冨洿鍐呯殑鍊鹼紝涓嶢SCII瀵瑰簲銆?br>
鏈湴鍖栫瓥鐣ラ泦錛坙ocale錛?br>
“灝?a'緲昏瘧鎴?x61鐨勬暣鏁板?#8221;錛?#8220;灝咥SCII鑼冨洿鍐呯殑緙栫爜涓巆har鐨勬暣鏁板煎搴旇搗鏉?#8221;錛岀被浼艱繖鏍風殑瑙勫畾錛屾槸鐗瑰畾緋葷粺鍜岀壒瀹氱紪璇戝櫒鍒跺畾鐨勶紝C/C++涓湁涓壒瀹氱殑鍚嶈瘝鏉ユ弿榪拌繖縐嶈瀹氱殑闆嗗悎錛氭湰鍦板寲絳栫暐闆嗭紙locale銆備篃鏈夌炕璇戞垚“鐜板満”錛夈傝岀炕璇戔斺斾篃灝辨槸浠g爜杞崲錛坈odecvt錛夊彧鏄繖涓泦鍚堜腑鐨勪竴涓紝C++涓畾涔変負絳栫暐錛坒acet銆備篃鏈夌炕璇戜負“鍒婚潰”錛?br>
C/C++鐨勭紪璇戠瓥鐣?br>
“鏈湴鍖栫瓥鐣ラ泦”鏄釜寰堝ソ鐨勬蹇碉紝鍙儨鍦ㄥ瓧絎﹀拰瀛楃涓茶繖涓眰闈笂錛孋/C++騫朵笉浣跨敤錛圕++鐨刲ocale閫氬父鍙槸褰卞搷嫻侊紙stream錛夛級錛孋/C++浣跨敤鏇寸洿鎺ョ畝鍗曠殑絳栫暐錛氱‖緙栫爜銆?br>綆鍗曠殑璇達紝瀛楃錛堜覆錛夊湪紼嬪簭鏂囦歡錛堝彲鎵ц鏂囦歡錛岄潪婧愭枃浠訛級涓殑琛ㄧず錛屼笌鍦ㄧ▼搴忔墽琛屼腑鍦ㄥ唴瀛樹腑鐨勮〃紺轟竴鑷淬傝冭檻涓ょ鎯呭喌錛?br>A銆乧har c = 0x61;
B銆乧har c = 'a';
鎯呭喌A涓嬶紝緙栬瘧鍣ㄥ彲浠ョ洿鎺ヨ璇嗕綔涓烘暣鏁扮殑c錛屼絾鏄湪鎯呭喌B涓嬶紝緙栬瘧鍣ㄥ繀欏誨皢'a'緲昏瘧鎴愭暣鏁般傜紪璇戝櫒鐨勭瓥鐣ヤ篃寰堢畝鍗曪紝灝辨槸鐩存帴璇誨彇瀛楃錛堜覆錛夊湪婧愭枃浠朵腑鐨勭紪鐮佹暟鍊箋傛瘮濡傦細
const char* s = "涓枃abc";
榪欐瀛楃涓插湪GB2312錛圵indows 936錛夛紝涔熷氨鏄垜浠殑windows榛樿涓枃緋葷粺婧愭枃浠朵腑鐨勭紪鐮佷負錛?br>0xD6   0xD0   0xCE 0xC4 0x61 0x62 0x63
鍦║TF-8錛屼篃灝辨槸Linux榛樿緋葷粺婧愭枃浠朵腑鐨勭紪鐮佷負錛?br>0xE4   0xB8   0xAD   0xE6   0x96   0x87   0x61   0x62   0x63
涓鑸儏鍐典笅錛岀紪璇戝櫒浼氬繝瀹炰簬婧愭枃浠剁殑緙栫爜涓簊璧嬪鹼紝渚嬪鐨勬儏鍐墊瘮濡俈C浼氳嚜浣滆仾鏄庣殑鎶婂ぇ閮ㄥ垎鍏朵粬綾誨瀷緙栫爜鐨勫瓧絎︿覆杞崲鎴怗B2312錛堥櫎浜嗗儚UTF-8 without signature榪欐牱鐨勫垢瀛樿咃級銆?br>紼嬪簭鍦ㄦ墽琛岀殑鏃跺欙紝s涔熷氨淇濇寔鏄繖鏍風殑緙栫爜錛屼笉浼氬啀鍋氬叾浠栫殑杞崲銆?br>
瀹藉瓧絎?wchar_t
姝echar娌℃湁瑙勫畾澶у皬錛寃char_t鍚屾牱娌℃湁鏍囧噯闄愬畾錛屾爣鍑嗗彧鏄姹備竴涓獁char_t鍙互琛ㄧず浠諱綍緋葷粺鎵鑳借璇嗙殑瀛楃錛屽湪win32涓紝wchar_t涓?6浣嶏紱Linux涓槸32浣嶃倃char_t鍚屾牱娌℃湁瑙勫畾緙栫爜錛屽洜涓篣nicode鐨勬蹇墊垜浠悗闈㈡墠瑙i噴錛屾墍浠ヨ繖閲屽彧鏄彁涓涓嬶紝鍦╳in32涓紝wchar_t鐨勭紪鐮佹槸UCS-2BE錛涜孡inux涓槸UTF-32BE錛堢瓑浠蜂簬UCS-4BE錛夛紝涓嶈繃綆鍗曠殑璇達紝鍦?6浣嶄互鍐咃紝涓涓瓧絎︾殑榪?縐嶇紪鐮佸兼槸涓鏍風殑銆傚洜姝わ細
const wchar_t* ws = L"涓枃abc";
鐨勭紪鐮佸垎鍒負錛?br>0x4E2D   0x6587    0x0061   0x0062   0x0063                                                //win32錛?6浣?br>0x00004E2D   0x00006587    0x00000061   0x00000062   0x00000063        //Linux錛?2浣?br>澶у啓鐨凩鏄憡璇夌紪璇戝櫒錛氳繖鏄瀛楃涓層傛墍浠ワ紝榪欐椂鍊欐槸闇瑕佺紪璇戝櫒鏍規嵁locale鏉ヨ繘琛岀炕璇戠殑銆?br>姣斿錛屽湪Windows鐜涓紝緙栬瘧鍣ㄧ殑緲昏瘧絳栫暐鏄疓B2312鍒癠CS-2BE錛汱inux鐜涓殑絳栫暐鏄疷TF-8鍒癠TF-32BE銆?br>榪欐椂鍊欏氨瑕佹眰婧愭枃浠剁殑緙栫爜涓庣紪璇戝櫒鐨勬湰鍦板寲絳栫暐闆嗕腑浠g爜緲昏瘧鐨勭瓥鐣ヤ竴鑷達紝渚嬪VC鍙兘璇誨彇GB2312鐨勬簮浠g爜錛堣繖閲岃繕鏄緥澶栵紝VC澶嚜浣滆仾鏄庝簡 錛屼細灝嗗緢澶氬叾浠栦唬鐮佸湪緙栬瘧鏃惰嚜鍔ㄨ漿鎹㈡垚GB2312錛夛紝鑰実cc鍙兘璇誨彇UTF-8鐨勬簮浠g爜錛堣繖閲屽氨鏈変釜灝村艾錛孧inGW榪愯win32涓嬶紝鎵浠ュ彧鏈塆B2312緋葷粺鎵嶈錛涜孧inGW鍗寸敤gcc緙栧啓錛屾墍浠ヨ嚜宸卞彧璁TF-8錛屾墍浠ョ粨鏋滃氨鏄紝MinGW鐨勫瀛楃琚簾鎺変簡錛夈?br>瀹藉瓧絎︼紙涓詫級鐢辯紪璇戝櫒緲昏瘧錛岃繕鏄紜紪鐮佽繘紼嬪簭鏂囦歡涓?

lf426 2010-06-25 14:41 鍙戣〃璇勮
]]>
socket 緙栫▼鍏ラ棬鏁欑▼錛堝叚錛塙DP搴旂敤錛?銆乁DP鐗堢殑Echo Clienthttp://www.shnenglu.com/lf426/archive/2010/06/12/117690.htmllf426lf426Sat, 12 Jun 2010 04:11:00 GMThttp://www.shnenglu.com/lf426/archive/2010/06/12/117690.htmlhttp://www.shnenglu.com/lf426/comments/117690.htmlhttp://www.shnenglu.com/lf426/archive/2010/06/12/117690.html#Feedback2http://www.shnenglu.com/lf426/comments/commentRss/117690.htmlhttp://www.shnenglu.com/lf426/services/trackbacks/117690.html鍚屾牱鐨勶紝鎴戜滑灝哢DP鐗堢殑doEcho()涔熻璁℃垚榪斿洖bool錛歵rue琛ㄧず寰幆緇х畫錛沠alse琛ㄧず鍏抽棴瀹㈡埛绔?/p>
class UDPEchoClient: public UDPClientSock{
public:
    
explicit UDPEchoClient(
                
int pre_buffer_size = 32);
    
~UDPEchoClient();
    
bool doEcho(const std::string& echo_message);
};
鎴戜滑渚濈劧浣跨敤C++瀛楃涓層?br>
UDPEchoClient::UDPEchoClient(
                
int pre_buffer_size):
UDPClientSock(pre_buffer_size)
{}

UDPEchoClient::
~UDPEchoClient()
{}

bool UDPEchoClient::doEcho(const std::string& echo_message)
{
    
if ( UDPSendtoDest(echo_message.data(), echo_message.size()) < 0) {
        
return false;
    }
    
if (echo_message == "/shutdown") {
        
return false;
    }
    
if (UDPReceive() < 0) {
        
return false;
    }
    std::cout.write(preBuffer, preReceivedLength);
    std::cout 
<< std::endl;
    
return true;
}
褰揺cho_message涓?#8220;絀?#8221;鐨勬椂鍊欙紝鍗寵緭鍏ョ洿鎺ュ洖杞︼紝鏄竴涓?"錛岀敤C椋庢牸鏉ヨ錛屽嵆鏃?\0'錛屼粠C++鏉ヨ錛屾槸const char[1]錛屽叾C++椋庢牸鐨勯暱搴cho_message.size()涓?錛岃繖鏃跺欏氨浼氬彂閫佷竴涓?#8220;0闀垮害”鐨刄DP鏁版嵁鍖呫?br>鍙﹀錛屾垜浠皬蹇冭璁′簡鍏抽棴鏈嶅姟鍣ㄧ殑璇鋒眰錛屽彂閫?shutdown鍚庯紝瀹㈡埛绔細鑷姩榪斿洖false錛岃〃紺轟細鍏抽棴錛屼笉鍐嶇瓑寰呮潵鑷湇鍔″櫒鐨剅ecvfrom()銆傚惁鍒欙紝鏈嶅姟鍣ㄥ凡緇忓叧闂紝recvfrom()鍒欎細涓鐩撮樆濉炪?br>
int main(int argc, char* argv[])
{
    unsigned 
short server_port = 5000;
    
if (argc == 3 && atoi(argv[2]) > 0) {
        server_port 
= atoi(argv[2]);
    }

    WinsockAPI winsockInfo;
    winsockInfo.showVersion();

    UDPEchoClient echo_client;
    echo_client.UDPSetDest(argv[
1], server_port);

    std::
string msg;
    
bool go_on = true;
    
while (msg != "/exit" && go_on){
        std::cout 
<< "Echo: ";
        std::getline(std::cin, msg);
        go_on 
= echo_client.doEcho(msg);
    }

    
return 0;
}
涓葷▼搴忎腑錛屽鏋滀嬌鐢?exit錛屼細鍏堝彂閫佺粰鏈嶅姟鍣紝鐒跺悗鍐嶅叧闂?br>鏈珷瀹屾暣婧愪唬鐮侊細
Linux錛?br>http://www.163pan.com/files/c0l000h0t.html
win32錛?br>http://www.163pan.com/files/c0o000h09.html

lf426 2010-06-12 12:11 鍙戣〃璇勮
]]>
socket 緙栫▼鍏ラ棬鏁欑▼錛堝叚錛塙DP搴旂敤錛?銆乁DP鐗堢殑Echo Serverhttp://www.shnenglu.com/lf426/archive/2010/06/12/117689.htmllf426lf426Sat, 12 Jun 2010 03:16:00 GMThttp://www.shnenglu.com/lf426/archive/2010/06/12/117689.htmlhttp://www.shnenglu.com/lf426/comments/117689.htmlhttp://www.shnenglu.com/lf426/archive/2010/06/12/117689.html#Feedback2http://www.shnenglu.com/lf426/comments/commentRss/117689.htmlhttp://www.shnenglu.com/lf426/services/trackbacks/117689.html
class UDPEchoServer: public UDPServerSock{
public:
    
explicit UDPEchoServer(
                unsigned 
short server_port,
                
int pre_buffer_size = 32);
    
~UDPEchoServer();
    
bool handEcho();
};
鎴戜滑渚濈劧璁﹉andEcho()榪斿洖涓涓猙ool錛宼rue琛ㄧず瀹㈡埛绔?#8220;姝e父”紱誨紑錛堣繖閲屾病鐢?#8220;鏂紑”榪欎釜璇嶆槸鍥犱負UDP鏄棤榪炴帴鐨勶紱鍙﹀錛屾垜浠繖閲岀敤recvfrom()榪斿洖灝忎簬0鏉ヨ〃紺哄鎴風鍏跺疄鏄?#8220;闈炴甯?#8221;鐨勭寮浜嗭紝姣斿榪炴帴琚噸緗備簨瀹炰笂錛屼綔涓篣DP鏈嶅姟鍣紝鏍規湰涓嶅叧蹇冨鎴風鏄湪榪炶繕鏄凡緇忕寮錛夛紝false琛ㄧず瀹㈡埛绔彂鍑烘寚浠よ姹傛湇鍔″櫒绔叧闂?br>
UDPEchoServer::UDPEchoServer(
                unsigned 
short server_port,
                
int pre_buffer_size):
UDPServerSock(server_port, pre_buffer_size)
{}

UDPEchoServer::
~UDPEchoServer()
{}

bool UDPEchoServer::handEcho()
{
    
const std::string SHUTDOWN_CMD = "/shutdown";
    
while (UDPReceive() >= 0) {
        std::
string cmd(preBuffer, SHUTDOWN_CMD.size());
        
if (cmd == SHUTDOWN_CMD &&
            
preReceivedLength == static_cast<int>(SHUTDOWN_CMD.size())) {
            
return false;
        }
        std::cout    
<< "Client ( "
                    
<< inet_ntoa(lastfromSockAddr.sin_addr)
                    
<< " : "
                    
<< ntohs(lastfromSockAddr.sin_port)
                    
<< " ) sent a message."
                    
<< std::endl;
        UDPSetDest(lastfromSockAddr);
        UDPSendtoDest(preBuffer, preReceivedLength);
    }
    
return true;
}
榪欓噷璺烼CP鏈変簺緇嗗井鐨勫樊鍒傚湪TCP涓紝recv()榪斿洖0琛ㄧず榪炴帴姝e父鏂紑錛岃孶DP涓病鏈夎繛鎺ュ拰鏂紑鐨勬蹇碉紝recv()鎴栬卹ecvfrom()榪斿洖0琛ㄧず鏀跺埌涓涓?瀛楄妭澶у皬鏁版嵁鐨勬暟鎹姤銆傚彟澶栵紝鍥犱負TCP鏄竴瀵逛竴榪炴帴鐨勶紝鎵浠ヤ竴鏃﹁繛鎺ヤ笂錛孴CP鏈嶅姟鍣ㄥ彧鑳藉鐞嗘潵鑷竴涓鎴風鐨別cho璇鋒眰錛堝悗闈細璁插埌澶氱嚎紼嬬殑浣跨敤錛屽氨鍙互璁㏕CP鍚屾椂澶勭悊澶氫釜瀹㈡埛绔簡錛夛紱鑰孶DP鏈嶅姟鍣ㄥ垯鍙互澶勭悊鏉ヨ嚜浠諱綍瀹㈡埛绔殑echo璇鋒眰錛屼負浜嗚繑鍥炰俊鎭埌姝g‘鐨勫鎴風錛屾垜浠殑絳栫暐鏄紝鎺ユ敹涓涓猆DP鏁版嵁鍖呭悗錛岄┈涓婂埛鏂板彂閫佺洰鏍囧湴鍧涓轟笂涓嬈℃帴鏀跺湴鍧錛岀劧鍚庡啀鍥炲彂鏁版嵁錛屾墍浠ヨ繖閲屾瘡嬈″浜嗕竴涓噸鏂版寚瀹氬彂閫佺洰鐨勫湴鐨勫嚱鏁般?br>鏈鍚庯紝涓葷▼搴忓熀鏈笉闇瑕佹敼鍙橈細
int main(int argc, char* argv[])
{
    
const unsigned short DEFAULT_PORT = 5000;
    unsigned 
short server_port = DEFAULT_PORT;
    
if (argc == 2 && atoi(argv[1]) > 0) {
        server_port 
= atoi(argv[1]);
    }

    UDPEchoServer echo_server(server_port);

    
bool go_on = true;
    
while (go_on){
        go_on 
= echo_server.handEcho();
    }

    
return 0;
}
鏈珷瀹屾暣婧愪唬鐮佷笅杞斤細
Linux錛?br>http://www.163pan.com/files/c0l000h0s.html
win32錛?br>http://www.163pan.com/files/c0o000h08.html

lf426 2010-06-12 11:16 鍙戣〃璇勮
]]>
socket 緙栫▼鍏ラ棬鏁欑▼錛堜簲錛塙DP鍘熺悊錛?銆侀璇籑SG_PEEKhttp://www.shnenglu.com/lf426/archive/2010/06/11/117631.htmllf426lf426Fri, 11 Jun 2010 05:30:00 GMThttp://www.shnenglu.com/lf426/archive/2010/06/11/117631.htmlhttp://www.shnenglu.com/lf426/comments/117631.htmlhttp://www.shnenglu.com/lf426/archive/2010/06/11/117631.html#Feedback1http://www.shnenglu.com/lf426/comments/commentRss/117631.htmlhttp://www.shnenglu.com/lf426/services/trackbacks/117631.html
#include <sys/types.h>
#include 
<sys/socket.h>
ssize_t recv(
int s, void *buf, size_t len, int flags);
ssize_t recvfrom(
int s, void *buf, size_t len, int flags,
                              struct sockaddr *from, socklen_t *fromlen);
鍥犱負UDP鏄寜鏁版嵁鍖呮帴鏀剁殑錛屾垜浠湪鎺ユ敹涔嬪墠騫朵笉鐭ラ亾榪欎釜鏁版嵁鍖呮湁澶氬ぇ銆備竴涓瓥鐣ユ槸錛屾垜浠噯澶囪凍澶熷ぇ鐨勫簲鐢ㄧ▼搴忕紦瀛樹互鍏嶅嚭閿欙紝浣嗘槸榪欎釜“瓚沖澶?#8221;鐨勬蹇墊槸寤虹珛鍦ㄦ垜浠浼犻佺殑鏁版嵁浜嬪厛鏈変簡瑙g殑鎯呭喌涓嬶紝姣斿鏄垜浠嚜宸辮璁℃湇鍔″櫒绔拰瀹㈡埛绔茍涓斿埗瀹氬簲鐢ㄥ眰鍗忚錛涘彟澶栦竴縐嶇瓥鐣ユ槸錛屽皢涓涓暟鎹寘鐨勭浉鍏充俊鎭褰曞湪鏁版嵁鍖呯殑鍓嶉潰鐨勪竴浜涘瓧鑺備腑錛屾瘮濡傝澶у皬錛岃繖鏍鳳紝鎴戜滑鍙互閫氳繃棰勮鏁版嵁鍖呯殑鍓嶉潰涓孌碉紝寰楀埌榪欎釜鏁版嵁鍖呯殑鐩稿叧淇℃伅錛屾瘮濡傝澶у皬錛岀劧鍚庡啀瀹夋帓緙撳瓨銆?br>榪欎釜棰勮鐨刦lag灝辨槸MSG_PEEK銆備嬌鐢ㄩ璇誨悗錛孯ecvQ鐨勪笅涓鏉DP鏁版嵁鍖呬俊鎭璇誨嚭鏉ワ紝浣嗘槸騫朵笉浠嶳ecvQ涓脊鍑恒?br>UDP涔熷彲浠ラ氳繃recvfrom()棰勮鑾峰緱鏉ュ悜鐨勮繙紼嬪湴鍧錛屼粠鑰屽彲浠ユ彁渚涚粰姣斿connect()絳夊嚱鏁頒嬌鐢ㄣ?br>闇瑕佽鏄庣殑鏄紝鍦↙inux涓嬶紙鎴戞槸Debian緋葷粺錛変粠涓涓猲瀛楄妭鐨刄DP鏁版嵁鍖呬腑棰勮鍙栧皬浜巒涓瓧鑺傜殑鏁版嵁鏄畬鍏ㄦ病鏈夐棶棰樼殑錛涗絾鏄湪WinSock涓嬩細寮曡搗涓涓紓甯?0040錛圵SAEMSGSIZE錛夛紝鍗蟲槸璇磜in32涓媟ecv()鎴栬卹ecvfrom()鍦ㄨ繖縐嶆儏鍐典笅浼氳繑鍥?1銆傚叾寮傚父淇℃伅澶ф鏄鍙栫殑鏁版嵁闀垮害灝忎簬鏁版嵁鍖呯殑闀垮害鈥斺旇岃繖涓鏄垜浠鍒掍腑鐨勪簨鎯呫?

lf426 2010-06-11 13:30 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品视频一区二区高潮| 亚洲国产精品悠悠久久琪琪| 中国av一区| 欧美国产激情二区三区| 亚洲国产美国国产综合一区二区| 久久久一区二区三区| 免费视频亚洲| 国产在线播精品第三| 最新亚洲一区| 亚洲国产精品999| 国产视频观看一区| 欧美一区二区在线播放| 国产欧美日韩| 在线观看亚洲一区| 亚洲毛片在线观看| 日韩午夜在线观看视频| 欧美视频日韩视频| 欧美一区午夜精品| 欧美激情a∨在线视频播放| 欧美激情国产日韩| 欧美中在线观看| 久久三级福利| 欧美一区二区在线视频| 久久视频这里只有精品| 在线视频欧美日韩| 亚洲激情国产| 欧美午夜电影完整版| 午夜视频在线观看一区二区| 欧美一区二区三区在线播放| 午夜精品久久久久久久蜜桃app| 日韩写真在线| 蜜桃视频一区| 国产一区二区三区丝袜| 久久久久.com| 国产精品私人影院| 午夜亚洲伦理| 免费欧美在线视频| 欧美日韩视频在线第一区| 亚洲日本中文字幕| 久久蜜桃资源一区二区老牛| 亚洲已满18点击进入久久| 最新中文字幕亚洲| 国产精品视频第一区| 伊人久久成人| 免费亚洲电影在线观看| 欧美日韩一区二区三区免费看| 亚洲国产日韩欧美一区二区三区| 好看的av在线不卡观看| 欧美精品v日韩精品v国产精品| 久久午夜电影| 免费成人在线观看视频| 久久琪琪电影院| 亚洲精品一区二区三区不| 亚洲曰本av电影| 亚洲一区二区三区涩| 亚洲午夜av在线| 久久精品理论片| 亚洲深夜av| 欧美日韩三区| 日韩午夜电影av| 欧美777四色影视在线| 久久久久久9999| 午夜精品www| 久久综合狠狠综合久久综合88 | 亚洲美女在线看| 伊人久久男人天堂| 久久精品视频在线看| 久久久久久久久伊人| 欧美日韩精品在线播放| 免费不卡中文字幕视频| 亚洲天堂免费观看| 久久亚洲私人国产精品va媚药| 亚洲女优在线| 欧美一区二区在线视频| 一区二区不卡在线视频 午夜欧美不卡在| 99精品热6080yy久久| 亚洲欧美视频在线观看| 欧美11—12娇小xxxx| 国产婷婷色一区二区三区| 亚洲福利视频一区| 久久综合久色欧美综合狠狠| 亚洲一区精品在线| 亚洲精品国产精品国自产观看| 亚洲日本免费电影| 久久精品视频亚洲| 欧美三级视频在线观看| 亚洲肉体裸体xxxx137| 久久精品国产亚洲高清剧情介绍| 欧美一二三区在线观看| 亚洲神马久久| 国产精品久久久久一区二区三区共 | 欧美激情精品久久久久久黑人| 亚洲国产成人av在线| 99精品国产在热久久| 久久综合九九| 欧美日韩中文精品| 亚洲国产激情| 亚洲人成网站在线播| 午夜精品理论片| 国产日产欧产精品推荐色 | 久久久一区二区三区| 亚洲图片欧美午夜| 亚洲天堂av图片| 国际精品欧美精品| 欧美一区=区| 国产精品美女久久久久久久 | 国产一区二区三区网站| 亚洲第一精品夜夜躁人人躁| 欧美激情第8页| 久久视频精品在线| 牛牛精品成人免费视频| 一本色道久久精品| 欧美高清视频在线播放| 国产精品乱码一区二三区小蝌蚪 | 国产精品乱码一区二区三区| 欧美 日韩 国产一区二区在线视频| 亚洲伊人观看| 在线电影欧美日韩一区二区私密| 中文国产成人精品| 欧美国产精品va在线观看| 亚洲一区二区成人| 欧美日韩在线高清| 亚洲午夜久久久| 在线视频一区观看| 欧美午夜不卡视频| 亚洲电影有码| 久久爱www久久做| 久久精品成人一区二区三区蜜臀| 久久精品99国产精品日本| 亚洲系列中文字幕| 国产农村妇女精品| 久久精品午夜| 亚洲肉体裸体xxxx137| 亚洲国产毛片完整版 | 亚洲电影在线免费观看| 国产精品少妇自拍| 亚洲欧美日韩国产综合| 欧美女人交a| 午夜在线观看欧美| 久久综合狠狠| 亚洲午夜一区| 性欧美大战久久久久久久免费观看| 久久精品国产亚洲a| 欧美成人精品一区二区三区| 一区二区三区国产| 亚洲宅男天堂在线观看无病毒| 欧美四级剧情无删版影片| 欧美欧美天天天天操| 久久综合给合久久狠狠色| 99在线|亚洲一区二区| 亚洲免费婷婷| 亚洲综合视频网| 久久香蕉国产线看观看网| 亚洲一区亚洲二区| 亚洲电影免费观看高清| 国内久久精品视频| 国产精品久久一级| 国语自产偷拍精品视频偷| 国产麻豆成人精品| 欧美视频在线观看免费| 黄色成人av网站| 亚洲欧美激情视频| 欧美影院成人| 欧美在线视频一区二区| 久久久久久9| 久久激情中文| 欧美不卡视频| 国产精品99久久久久久人| 久久精彩免费视频| 亚洲精选久久| 久久五月激情| 国产精品久久久久aaaa九色| 亚洲日本在线视频观看| 夜夜爽99久久国产综合精品女不卡| 欧美一区二区大片| 麻豆精品网站| 国产精品久久久久永久免费观看| 精品成人一区二区三区四区| 久久国产精品黑丝| 久久精品视频在线免费观看| 亚洲激情图片小说视频| 久久综合久久88| 久久精品国产久精国产爱| 欧美理论在线| 国语自产在线不卡| 午夜精品久久久久久久蜜桃app| 亚洲国产精品热久久| 久久久久国产免费免费| 在线播放豆国产99亚洲| 亚洲综合丁香| 久久嫩草精品久久久久| 久久久久久久波多野高潮日日| 欧美激情精品久久久久久蜜臀| 国产一级一区二区| 亚洲欧美激情视频在线观看一区二区三区 | 久久狠狠亚洲综合| 国产一区二区三区在线播放免费观看| 久久精品久久综合| aaa亚洲精品一二三区| 国产精品久久久久久户外露出 |