【发布时间】:2016-10-19 12:25:53
【问题描述】:
我有一条大消息,必须初始化为默认值。消息是一个有很多子结构、枚举等的结构。我有一个自动生成的消息描述文件,里面包含了消息的逐字段解析:字段起始字节、起始位、长度、类型、默认值。 我已经实现了一种将消息视为位缓冲区并根据描述文件对其进行初始化的机制。但是....我对浮点默认值有疑问。 如何自动按位设置浮点变量?
谢谢!
【问题讨论】:
-
看情况,浮点成员的默认值应该是多少?如果它是零,那么所有零都可以。
-
但是,如果您使用 C++ 编程,为什么不能为每个结构设置一个默认构造函数,以正确的方式初始化其所有成员?非虚拟成员函数(如构造函数)不会“污染”结构的数据。
-
默认值可以推迟,它们事先不知道。描述文件是第三方给我的。
-
我在下面看到了你的答案,但是....我很好奇你的
MSG_STRUCT_TYPE是什么样的。特别是,我很好奇为什么必须将int startByte = 28;定义为msgBuf的索引。使用正确定义的结构,您不必手动指定这样的索引来到达OutputMsg中的特定位置,您应该能够引用特定成员的offsetof(),编译器会计算找出那个偏移量是什么。然后,如果您的结构发生变化,偏移量会自动更改。见:en.cppreference.com/w/cpp/types/offsetof -
startByte 定义仅用于此处的简短类比示例。正如我在原始帖子中提到的,我有一个文件,其中包含结构的定义 - 所有结构字段的起始字节、位、长度和类型。
标签: c++ floating-point bit-manipulation