将缓冲区数据解析为结构
parsing buffer data into struct
我正在尝试为从 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
};
如何做到这一点?感谢任何帮助或指点。
Can I simply parse the data by casting struct object onto the buffer?
您可以对传入缓冲区执行 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_REPORT
和 pAppBuffer
的大小完全相同,并且信息与您的结构对齐
我正在尝试为从 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
};
如何做到这一点?感谢任何帮助或指点。
Can I simply parse the data by casting struct object onto the buffer?
您可以对传入缓冲区执行 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_REPORT
和 pAppBuffer
的大小完全相同,并且信息与您的结构对齐