有许多情况(特别是在低级编程中),其中数据的二进制布局很重要.例如:硬件/驱动程序操作,网络协议等.
在C++中,我可以使用char*和按位操作(掩码和移位)读/写任意二进制结构,但这很乏味且容易出错.显然,我试图限制这些操作的范围并将它们封装在更高级别的API中,但它仍然很痛苦.
C++位域似乎为这个问题提供了一个开发人员友好的解决方案,但不幸的是它们的存储是特定于实现的.
NathanOliver提到std::bitset哪些基本上允许你访问一个整数的单个位,operator[]但是很好但缺少多位字段的访问器.
使用元编程和/或宏,可以抽象库中的按位运算.因为我不想重新发明轮子,所以我正在寻找一个(最好是STL或boost)库.
为了记录,我正在研究这个DNS解析器,但问题及其解决方案应该是通用的.
编辑:简短的回答:事实证明,bitfield的存储在实践中是可靠的(即使它不是标准规定的),因为系统/网络库使用它们,并且在使用主流编译器编译时表现良好的程序.