我正在编写使用com技术的小应用程序。我想将BSTR字符串转换为unsigned char。为此,我使用W2A()宏从BSTR转换为String,然后将String.C_STR()复制到unsigned char数组。代码段如下:
Send(BSTR *packet, int length)
{
std::string strPacket = W2A(*packet);
unsigned char * pBuffer = new unsigned char [strPacket.length()+1];
memset(pBuffer,0,strPacket.length()+1);
memcpy(pBuffer,strPacket.c_str(),strPacket.length()+1);
}
当数据包包含普通字符串时,此方法正常。但是如果数据包中包含NUL字符,则会出现问题。在 pBuffer 中的NUL之后出现了一些未知字符,即转换后。
任何人都可以告诉我如何避免这种情况吗?或者有没有其他方法正确地做到这一点?
答案 0 :(得分:0)
BSTR是Windows API类型,必须使用API宏或函数进行管理。如果你不能使用W2A宏,因为你的字符串里面可能有空字符,你必须使用WideCharToMultiByte函数,它可以从BSTR的宽字符转换为char *的窄字符。一定要有SDK文档。或者,您可以让程序使用WCHAR