描述:
通过WideCharToMultiByte函数将接收到的数据转换后存入文件,但数据中包含0x00,于是转换时被截断了,怎么办?
解决方案1:
我想你肯定没有转好吧,下面的代码你可以参考,取得数据后,利用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));
}
两个函数! 第一个是将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;
}