MS VC ++将字节数组转换为BSTR?

时间:2009-09-23 08:37:06

标签: c++ bytearray bstr

我有一个从.Net应用程序开始的字符串,加密并存储在AD中。然后它被本机C ++应用程序选中并解密以生成一个字节数组 例如,一旦在C ++端解密,“ABCDEF”就变为00,41,00,42,00,43,00,44,00,45。

我需要使用这个字节数组并将其转换为BSTR“ABCDEF”,以便我可以在其他地方使用它,我找不到一种方法来完成最后一步。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

如果您确实有一个任意字节数组,请使用SysAllocStringByteLen。但看起来,尽管是在一个字节数组中,你的数据实际上是一个UTF-16编码的Unicode字符串,所以在这种情况下,你可能最好使用SysAllocStringLen。将字节数组指针传递给函数(类型转换为OLECHAR*),然后将字符复制到新字符串中,并在末尾添加一个空字符。

答案 1 :(得分:0)

“decrypted string”只是一个Unicode字符串 - 拉丁字符包含以Unicode表示时等于null的第一个字节。因此,您不需要任何真正的转换,只需从该缓冲区中烹饪BSTR。

知道Unicode字符的数量 - 它将是缓冲区长度的一半 - 调用SysAllocStringLen()来分配足够长的以空值终止的未初始化的BSTR。然后使用memcpy()将数组复制到分配的字符串中。或者,您可以调用SysAllocStringLen()并将字节缓冲区传递给它,以便它为您执行复制并跳过memcpy()。当您不再需要BSTR时,不要忘记致电SysFreeString()