读书人

TMemoryStream怎么完整保存wchar_t

发布时间: 2013-01-05 15:20:39 作者: rapoo

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).

读书人网 >C++ Builder

热点推荐