2016-05-13 10 views
0

私はバイナリ形式にマーシャリングされ、ソケット接続を介してC++アプリケーションに送信されるC#で複数の変数を含むオブジェクトを持っています。 C++アプリケーションは、TArray < uint8>の形式でバイナリデータを受け取ります。 C#でシリアル化されたフィールドの1つがGUIDです。私はパケットをデシリアライズして、C++ GUIDを移植しようとしています。C++でバイナリパケットからGUIDを抽出する方法は?

まずIはメモリリーダを使用してGUIDフィールドがなければならないバイト位置に行くバイナリデータをロード:

FMemoryReader FromBinary = FMemoryReader(TheBinaryArray, true); 
FromBinary.Seek(9); 

GUIDフィールドは、バイナリで16バイトであるべきです。だから私は今、私はデータでGUIDを移入する方法を知らない新しいGUID

GUID guid; 

を作成するC++

uint32 Data[4]; 

に16バイトのフィールドを作成し、

FromBinary << Data[0]; 
FromBinary << Data[1]; 
FromBinary << Data[2]; 
FromBinary << Data[3]; 

データを取り込みます?

答えて

2

GUIDは、4 uint32の値ではありません。 1 uint32,、および8 uint8の値で構成されています。

あなたは(なぜあなたは代わりのuint8 Data[16]を使用していますか?)GUID変数に配列から生のバイトをコピーすることができます。あなたは、例えば、そのためにmemcpy()またはCopyMemory()を使用することができます。

GUID guid; 
memcpy(&guid, &Data[0], 16); 
//CopyMemory(&guid, &Data[0], 16); 

それとも、単にGUID*に配列の最初のバイトのメモリアドレスをキャストし、入力し、ポインタを逆参照してGUID変数に割り当てることができます:

GUID guid; 
guid = *((GUID*)&Data[0]); 

それとも、単に完全配列を取り除くと(あなたがリーダーではなく、配列にvoid*ポインタを渡すことができれば)直接GUID変数にメモリリーダからバイトを読みます。

関連する問題