我有一个从.Net应用程序开始的字符串,加密并存储在AD中。然后它被本机C ++应用程序选中并解密以生成一个字节数组 例如,一旦在C ++端解密,“ABCDEF”就变为00,41,00,42,00,43,00,44,00,45。
我需要使用这个字节数组并将其转换为BSTR“ABCDEF”,以便我可以在其他地方使用它,我找不到一种方法来完成最后一步。
有人可以帮忙吗?
答案 0 :(得分:1)
如果您确实有一个任意字节数组,请使用SysAllocStringByteLen
。但看起来,尽管是在一个字节数组中,你的数据实际上是一个UTF-16编码的Unicode字符串,所以在这种情况下,你可能最好使用SysAllocStringLen
。将字节数组指针传递给函数(类型转换为OLECHAR*
),然后将字符复制到新字符串中,并在末尾添加一个空字符。
答案 1 :(得分:0)
“decrypted string”只是一个Unicode字符串 - 拉丁字符包含以Unicode表示时等于null的第一个字节。因此,您不需要任何真正的转换,只需从该缓冲区中烹饪BSTR。
知道Unicode字符的数量 - 它将是缓冲区长度的一半 - 调用SysAllocStringLen()
来分配足够长的以空值终止的未初始化的BSTR。然后使用memcpy()
将数组复制到分配的字符串中。或者,您可以调用SysAllocStringLen()
并将字节缓冲区传递给它,以便它为您执行复制并跳过memcpy()
。当您不再需要BSTR时,不要忘记致电SysFreeString()
。