I have a string that starts out in a .Net application, is encrypted and stored in AD. It's then picked up by a native C++ app and decrypted to produce an array of bytes eg "ABCDEF" becomes 00,41,00,42,00,43,00,44,00,45 once it has been decrypted at the C++ end.
I need to take this byte array and convert it to the BSTR "ABCDEF" so that I can use it elsewhere and I can't find a way to acomplish this last step.
Can anybody help?
If you really have an array of arbitrary bytes, use SysAllocStringByteLen
. But it looks like, despite being in a byte array, your data is really a UTF-16-encoded Unicode string, so in that case, you're probably better off using SysAllocStringLen
instead. Pass the byte-array pointer to the function (type-cast to OLECHAR*
), and the characters will be copied into the new string for you, along with an additional null character at the end.
The "decrypted string" is just a Unicode string - latin characters contain the first byte equal to null when represented in Unicode. So you don't need any real conversion, just cook a BSTR out of that buffer.
Knowing the number of Unicode characters - it will be half the length of the buffer - call SysAllocStringLen()
to allocate a long enough null-terminated uninitialized BSTR. Then copy your array onto the allocated string with memcpy()
. Alternatively you can call SysAllocStringLen()
and pass it the byte buffer so that it does the copy for you and skip the memcpy()
. Don't forget to call SysFreeString()
when you no longer need the BSTR.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.