测试代码:
记录一下测试代码
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
using namespace std;
#pragma pack(1)
struct bitFiled
{
char chId:4;
char seqNumber;
char cf:4;
short signalId:12;
short dataLen:12;
char pn;
char tp;
};
#pragma pack()
#pragma pack(push, 1)
/// @brief Header used for INC communication
struct Header
{
uint8_t controlField :4;
uint8_t channelId :4;
uint8_t sequenceNumber;
uint8_t totalPackets;
uint32_t packetNumber :8;
uint32_t signalId :12;
uint32_t dataLength :12;
};
#pragma pack(pop)
int main()
{
Header test;
cout << "bitFiled:"<<sizeof(bitFiled)<<endl;
cout << "----incHeader-----:"<<sizeof(test)<<endl;
unsigned char data[7]={0xAB,0xFF,0xCD,0xEF,0x12,0x34,0x56};
memcpy(&test,data,7);
printf("controlField:%x\n",test.controlField);
printf("channelId:%x\n",test.channelId);
printf("sequenceNumber:%x\n",test.sequenceNumber);
printf("totalPackets:%x\n",test.totalPackets);
printf("packetNumber:%x\n",test.packetNumber);
printf("signalId:%x\n",test.signalId);
printf("dataLength:%x\n",test.dataLength);
return 0;
}
/*
bitFiled:8
----incHeader-----:7
controlField:b
channelId:a
sequenceNumber:ff
totalPackets:cd
packetNumber:ef
signalId:412
dataLength:563
*/
位域: