c++ - 如何将 8 字节数组中的信息传递到可变位大小的数据容器中?

标签 c++ bit-manipulation dbus

我有一个 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 库还有一些不错的位操作类:

Dynamic Bitset

如果格式不变,则可能有点矫枉过正。

关于c++ - 如何将 8 字节数组中的信息传递到可变位大小的数据容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1128212/

相关文章:

c++ - C++ 应用程序中的静态数据内存限制

python - 对字节进行按位运算

c++ - 是否有一种无分支方法可以快速找到两个 double 浮点值的最小值/最大值?

C:损坏的迭代器发送 D-BUS 信号

c - DBUS 服务器崩溃

c++ - 为模板类中的嵌套类专门化 std::hash

c++ - 关于多重继承和歧义

c++ - 编写一个 C++ 程序,查找字符串中使用的元音字母的数量

c - 术语和代码行的平等

c - 如何解决C中的类型冲突问题