WideCharToMultiByte问题

yabc 2005-11-28 09:27:08
通过WideCharToMultiByte函数将接收到的数据转换后存入文件,但数据中包含0x00,于是转换时被截断了,怎么办?
...全文
213 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoujiamurong 2006-03-16
  • 打赏
  • 举报
回复
好,谢谢 koko
koko1998 2005-11-29
  • 打赏
  • 举报
回复
两个函数! 第一个是将Unicode变成ASCII 第二个是将ASCII 变成
Unicode
你可以将Unicode变成ASCII后进行操作,然后再ASCII 变成Unicode保存

inline LPTSTR B2A(BSTR lp)
{
int nLen=(lstrlenW(lp)+1)<<1;

LPTSTR str=new char[nLen];

WideCharToMultiByte(CP_ACP, 0, lp, -1, str, nLen, NULL, NULL);

return str;
}

inline BSTR A2B(LPCSTR lp)
{
int nLen = lstrlen(lp)>>1-1;

BSTR str = ::SysAllocStringLen(NULL, nLen);

MultiByteToWideChar(CP_ACP, 0, lp, -1, str, nLen);

return str;
}
goodboyws 2005-11-29
  • 打赏
  • 举报
回复
呵呵,我看成MultiByteToWideChar了
楼上的代码可以用
frank_necsthz 2005-11-29
  • 打赏
  • 举报
回复
我想你肯定没有转好吧,下面的代码你可以参考,取得数据后,利用CFile类就很方便解决。
自己试试看!

UINT GetObjectName(IAccessible* pacc, VARIANT* pvarChild, LPTSTR lpszName, UINT cchName)
{
HRESULT hr;
BSTR bstrName;

*lpszName = 0;
bstrName = NULL;

hr = ....//省略

if (SUCCEEDED(hr) && bstrName)
{
WideCharToMultiByte(CP_ACP, 0, bstrName, -1, lpszName, cchName, NULL, NULL);
SysFreeString(bstrName);
}
else
{
lstrcpy(lpszName,"NoName");
SysFreeString(bstrName);
}

return(lstrlen(lpszName));
}
goodboyws 2005-11-28
  • 打赏
  • 举报
回复
用CFile::Write保存,或者编译成UNICODE版本

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧