2017-01-16 130 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與struct的大小相同嗎? –

+0

是你的代碼C#還是C++? – Gonmator

+0

我發佈的代碼是C++ –

回答

1

我可以簡單地通過將結構對象轉換到緩衝區來解析數據嗎?

你可以做memcpystruct與輸入緩衝器,提供你確定進入緩衝區或內容對準結構定義。

例如

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_REPORT這種規模和pAppBuffer是完全相同,信息對準的告誡你結構