首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

TMemoryStream怎么完整保存wchar_t

2013-01-05 
TMemoryStream如何完整保存wchar_t?我想用TMemoryStream保存wchar_t所有数据然后发送给另一个程序,但是接

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;

[解决办法]
len=wcslen(w) * sizeof(wchar_t).

热点排行