TMemoryStream如何完整保存wchar_t?
我想用TMemoryStream保存wchar_t所有数据然后发送给另一个程序,但是接收乱码,帮我看看这样写对不对?
wchat_t* w="测试"
int len=wcslen(w)
TMemoryStream* m=new TMemoryStream
m->Write(w,len); //我这里改成m->Write(&w,len);也是乱码,这里的size到底要不要*2?wchar_t占2位是不是要*2?
[解决办法]
sizeof(wchar_t)*3
[解决办法]
http://topic.csdn.net/t/20050530/13/4045788.html
[解决办法]
[url=http://][/url]
Terry_Liu 的方法
(2)你可以用 BCB 執行以下測試程式碼 (利用 Win32 API MultiByteToWideChar 轉換 BIG5 成 UNICODE) char szBIG5[64]={0}; wchar_t wszUNICODE[64]={0}; lstrcpy(szBIG5, "簡"); TMemoryStream *ms1=new TMemoryStream; ms1->Size=64*sizeof(char); ms1->Write(szBIG5, ms1->Size); ms1->SaveToFile("test1.txt"); delete ms1; MultiByteToWideChar(CP_ACP, 0, szBIG5, -1, wszUNICODE, 64*sizeof(wchar_t)); TMemoryStream *ms2=new TMemoryStream; ms2->Size=64*sizeof(wchar_t); ms2->Write(wszUNICODE, ms2->Size); ms2->SaveToFile("test2.txt"); delete ms2;(3)執行完畢之後,會產生兩個檔案,其中檔案「test1.txt」就是「簡」字的 BIG5 編碼 (檔案內容的第 1~2 BYTE C2 B2,代表編碼為 0xB2C2);另外檔 案「test2.txt」就是「簡」字的 Unicode 編碼 (檔案內容的第 1~2 BYTE 21 7C,代表編碼為 0x7C21)(4)接著,就可以把編碼代入你原來的程式碼,看看結果如何? WideString ws; ws.SetLength(1); ws[1]=0x7C21; RichEdit1->Text=ws;(5)MSDN 參考說明文件 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/intl/unicode_17si.asp
[解决办法]
int len=wcslen(w) 这个地方用错了
wcslen求的是wchar_t的字符串长度
如:wchar_t* wstr=L"你好";
int len=wcslen(wstr);//=2
但是实际占有空间为4字节,原因:wchar_t类型一个字符占2个字节。
[解决办法]
wchar_t *w = L"测试";
int len = wcslen(w);
int size = len * 2;
TMemoryStream *m = new TMemoryStream;
m->SetSize(size);
m->Write(w, size);
...
// delete m;