我必须为以下数据包 header 编写 C++ 代码:
Original image link, PNG version of the above JPEG.
这是我为上述数据包格式编写的结构代码。我想知道 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;
//-----------------//
};
如何确保 LSB -> MSB 保留在结构中?
我一直感到困惑,我已经尝试阅读,但结果却让我更加困惑。
PS:我使用的是 32 位处理器。
最佳答案
使用位字段时位的确切映射方式是特定于实现的。因此很难确定您是否做对了,我们需要知道确切的 CPU 和编译器(当然还有编译器版本)。
简而言之;不要这样做。位域对于这样的事情不是很有用。
改为手动执行,根据需要声明单词并设置其中的位。
关于c++ - 结构位打包和 LSB/MSB 歧义 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24698096/