2017-01-16 20 views
0

HIDからデータを読み込むC++コード用のC#ラッパーを作成しようとしています。私が与えられたコードはかなり単純ですが、完全ではありません。バッファーデータを構造体に解析する

pTmpBuf = (U8 *)calloc(InputReportByteLength, sizeof(U8)); 
if (ReadFile(hDevice, pTmpBuf, InputReportByteLength, &nRead, NULL)) 
{ 
memcpy(`pAppBuffer`, pTmpBuf + 1, nRead-1); 
} 

私は次のように定義される構造体にpAppBuffer内のデータを解析する、次のとおりです:

struct BAYER_CONTOUR_REPORT 
{ 
unsigned char reportID; // HID report ID 
unsigned char checkSum; // checksum for hostID + deviceID + data 
unsigned char hostID // host ID assigned by communications manager 
unsigned char deviceID; // device ID assigned by communications manager 
unsigned char length; // length of data in buffer 
unsigned char data[60]; // data send with message 
}; 

これを行うことができますどのようにデータは以下のようにバッファに読み込まれているデバイスから受信しました?どんな助けや指針もありがとうございます。

+0

pAppBufferは構造体と同じサイズですか? –

+0

コードはC#またはC++ですか? – Gonmator

+0

私が投稿したコードはC++ –

答えて

1

structオブジェクトをバッファにキャストするだけでデータを解析できますか?

は、あなたが入ってくるバッファまたは内容の定義を構築するために整列されている確認していて、memcpyの着信バッファとstructに行うことができます。

ここ
struct abc { 
    char a; 
    char b; 
    char c; 
    char d[2]; 
}; 

int main() { 

    char arr[5] = { 'a', 'b', 'c', 'd', 'e' }; 
    struct abc sa; 
    memcpy(&sa, arr, 5); 


    return 0; 
} 

arr例えば

着信バッファであり、そしてmemcpyですべてのコンテンツを適切にコピーされます。

同様に、あなたのコードに次の

再び
struct BAYER_CONTOUR_REPORT bcr; 
memcpy(&bcr, pAppBuffer, sizeof(struct BAYER_CONTOUR_REPORT)) 

を行うことができ、あなたがstruct struct BAYER_CONTOUR_REPORTpAppBufferのサイズがまったく同じであるとの情報があなたに合っていることを絶対に確認する必要があり警告を気にしてください。構造体

関連する問題