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