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*) と、文字が新しい文字列にコピーされ、末尾に null 文字が追加されます。

于 2009-09-23T08:45:55.520 に答える
0

「復号化された文字列」は単なる Unicode 文字列です。Unicode で表された場合、ラテン文字には null に等しい最初のバイトが含まれます。そのため、実際の変換は必要ありません。そのバッファーから BSTR をクックするだけです。

Unicode 文字の数がわかっている場合 (バッファーの長さの半分になります)、SysAllocStringLen()十分な長さの null で終わる初期化されていない BSTR を割り当てる呼び出しを行います。次に、配列を割り当てられた文字列にコピーしますmemcpy()。または、バイト バッファを呼び出しSysAllocStringLen()て渡すこともできます。これにより、コピーが行われ、memcpy(). SysFreeString()BSTR が不要になったら、忘れずに呼び出してください。

于 2009-09-23T08:38:20.567 に答える