2017-01-16 105 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是完全相同,信息对准的告诫你结构