我有一个 8 字节的消息,其中消息的不同 block 映射到不同类型(int、bool 等)的数据,并且它们的位大小不同(消息中的 int 值是 12 位,等等) .).我只想传递数据相关的位,但我不确定是否有更好的方法。我目前的想法是制作一个带有 vector 后端的位数组类型,并使用模板化访问器来获取指定类型中包含的值。尽管在我打字时我开始认为可以将所有可能类型的一个大 union 传递给每个数据。
编辑:
消息包含不同类型的数据。例如,一条消息包含一个 8 位 int 和 5 个 1 位 bool,而另一条消息包含一个 16 位 Timestamped(我自己的类)和一个 8 位 int。
最佳答案
消息的格式/顺序是否始终相同? IE。 12bitsInt|8bitsChar|等。如果是这样,一个简单的解决方案就是设置适当的位掩码来获取每个特定值。 IE。如果前 12 位(低位)对应于一个整数,我们可以这样做:
__uint64 Message; // Obviously has data in it.
int IntPortion = Message & 0x00000111;
这会将消息的前 12 位复制到整数类型的前 12 位。为消息的每个 block 设置适当的位掩码并继续。如果消息格式不是固定的……好吧,我需要你用一个示例消息来详细说明。 boost 库还有一些不错的位操作类:
如果格式不变,则可能有点矫枉过正。
关于c++ - 如何将 8 字节数组中的信息传递到可变位大小的数据容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1128212/