如何将BSTR字符串转换为无符号字符(在appln中使用com技术)

时间:2014-04-29 10:53:12

标签: visual-c++ com

我正在编写使用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之后出现了一些未知字符,即转换后。

任何人都可以告诉我如何避免这种情况吗?或者有没有其他方法正确地做到这一点?

1 个答案:

答案 0 :(得分:0)

BSTR是Windows API类型,必须使用API​​宏或函数进行管理。如果你不能使用W2A宏,因为你的字符串里面可能有空字符,你必须使用WideCharToMultiByte函数,它可以从BSTR的宽字符转换为char *的窄字符。一定要有SDK文档。或者,您可以让程序使用WCHAR