3

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

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

有人可以帮忙吗?

4

2 回答 2

2

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

于 2009-09-23T08:45:55.520 回答
0

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

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

于 2009-09-23T08:38:20.567 回答