【发布时间】:2015-10-21 22:53:02
【问题描述】:
在许多情况下(尤其是在低级编程中),数据的二进制布局很重要。例如:硬件/驱动程序操作、网络协议等。
在 C++ 中,我可以使用 char* 和按位运算(掩码和移位)读取/写入任意二进制结构,但这很乏味且容易出错。显然,我尝试限制这些操作的范围,并将它们封装在更高级别的 API 中,但这仍然很痛苦。
C++ bitfields 似乎为这个问题提供了一个开发人员友好的解决方案,但不幸的是他们的存储是implementation specific。
NathanOliver 提到了std::bitset,它基本上允许您使用漂亮的operator[] 访问整数的各个位,但缺少多位字段的访问器。
使用元编程和/或宏,可以在库中抽象按位操作。因为我不想重新发明轮子,所以我正在寻找一个(最好是 STL 或 boost)库来做到这一点。
为了记录,我正在寻找 DNS 解析器,但问题及其解决方案应该是通用的。
编辑:简短回答:事实证明,bitfield 的存储在实践中是可靠的(即使标准没有强制要求),因为系统/网络库使用它们并产生使用主流编译器编译时表现良好的程序。
【问题讨论】:
-
有时我通过在编译时使用一些元编程抽象位操作来解决这个问题。
-
你看过
std::bitset -
本想回答这个问题,但它被关闭了,也许我应该写一篇博客文章,介绍我在我从事的嵌入式项目中是如何做到这一点的。
-
离题?从什么时候开始,“我该如何做得更好”的问题离题了?
-
@NathanOliver(和其他人)(恕我直言)收到此 VTC 原因的问题通常是非常广泛的问题(“我在哪里学习 X?”),无法以独立的方式回答.这个问题非常集中,可以用临时代码、标准功能、Boost 或其他库来回答。考虑到手头相对较小的问题,我会说可能有独立的临时答案,这很好。事实上,我有一个这样的答案。
标签: c++ bit-fields