Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
微软VC++;是否将字节数组转换为BSTR? 我有一个字符串,它是在.NET应用程序中启动的,被加密并存储在AD.中,然后由本地C++应用程序拾取并解密,以产生字节数组。 例如,“abcDEF”在C++结束时被解密为0、41、00、42、00、43、00、44、00、45。_C++_Bytearray_Bstr - Fatal编程技术网

微软VC++;是否将字节数组转换为BSTR? 我有一个字符串,它是在.NET应用程序中启动的,被加密并存储在AD.中,然后由本地C++应用程序拾取并解密,以产生字节数组。 例如,“abcDEF”在C++结束时被解密为0、41、00、42、00、43、00、44、00、45。

微软VC++;是否将字节数组转换为BSTR? 我有一个字符串,它是在.NET应用程序中启动的,被加密并存储在AD.中,然后由本地C++应用程序拾取并解密,以产生字节数组。 例如,“abcDEF”在C++结束时被解密为0、41、00、42、00、43、00、44、00、45。,c++,bytearray,bstr,C++,Bytearray,Bstr,我需要将这个字节数组转换成BSTR“ABCDEF”,这样我就可以在其他地方使用它,而我找不到完成最后一步的方法 有人能帮忙吗?这个“解密字符串”只是一个Unicode字符串-当用Unicode表示时,拉丁字符包含的第一个字节等于null。因此,您不需要任何真正的转换,只需从该缓冲区中制作一个BSTR 知道Unicode字符的数量-它将是缓冲区长度的一半-调用SysAllocStringLen()以分配足够长的以null结尾的未初始化BSTR。然后使用memcpy()将数组复制到分配的字符串上。或

我需要将这个字节数组转换成BSTR“ABCDEF”,这样我就可以在其他地方使用它,而我找不到完成最后一步的方法

有人能帮忙吗?

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


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

如果您确实有一个任意字节数组,请使用。但看起来,尽管数据位于字节数组中,但它实际上是一个UTF-16编码的Unicode字符串,因此在这种情况下,您最好改用UTF-16编码的Unicode字符串。将字节数组指针传递给函数(键入cast to
OLECHAR*
),字符将被复制到新字符串中,并在末尾添加一个空字符。

为什么要创建一个未初始化的字符串,然后再复制字符
SysAllocStringLen
将在您允许的情况下为您复制字符。我认为假设字符位于某个可以流式传输的存储器中;在这种情况下,我们可以通过将源缓冲区直接流式传输到BSTR来避免分配源缓冲区。实际上,在这种情况下,这可能并不重要。@Rob Kennedy:是的,这是一个合理的补偿。谢谢你的回答。我已经走过这条路了,BSTR中的内容不是有效的unicode字符串。当我将BSTR打印到控制台时,我会得到一堆?s(奇怪的是,除了一个空格字符输出正确),正确的?s数,但不是正确的字符。假设我把控制台输出搞砸了,我测试了BSTR,测试结果是失败的。我使用的是BSTR newStr=SysAllocStringLen((ollechar*)decryptedBytes,dataLength/2);创建字符串。decryptedBytes数组不包含有效的字节流00,41。。。等等。这可能是一个尾数问题——每个Unicode字符中的字节都被交换,您需要将它们交换回来。Doh!谢谢,这就是问题所在。现在工作正常:-)