rkr*_*nka 0 c c++ embedded struct bit-packing
我必须为以下数据包头写一个c ++代码:
这是我为上面的数据包格式编写的结构代码.我想知道uint8_t或uint16_t位字段是否正确
struct TelemetryTransferFramePrimaryHeader
{
//-- 6 Ocets Long --//
//-- Master Channel ID (2 octets)--//
uint16_t TransferFrameVersionNumber : 2;
uint16_t SpacecraftID : 10;
uint16_t VirtualChannelID : 3;
uint16_t OCFFlag : 1;
//-----------------//
uint8_t MasterChannelFrameCount;
uint8_t VirtualChannelFrameCount;
//-- Transfer Frame Data Field Status (2 octets) --//
uint16_t TransferFrameSecondaryHeaderFlag : 1;
uint16_t SyncFlag : 1;
uint16_t PacketOrderFlag : 1;
uint16_t SegmentLengthID : 2;
uint16_t FirstHeaderPointer : 11;
//-----------------//
};
Run Code Online (Sandbox Code Playgroud)
如何确保在结构中保留LSB - > MSB?
我一直很困惑,我已经尝试过阅读,但最终让我更加困惑.
PS:我使用的是32位处理器.
使用位字段时,具体如何映射位是特定于实现的.所以很难确定你是否做得对,我们需要知道确切的CPU和编译器(当然还有编译器版本).
简而言之; 不要这样做.比特字段对于这样的事情不是很有用.
相反,通过根据需要声明单词并设置其中的位来手动执行.
归档时间: |
|
查看次数: |
1459 次 |
最近记录: |