Существует много ситуаций (особенно при программировании на низком уровне), где важна двоичная компоновка данных. Например: манипуляция аппаратными средствами/драйверами, сетевые протоколы и т.д.
В С++ я могу читать/писать произвольные двоичные структуры, используя char*
и побитовые операции (маски и сдвиги), но это утомительное и подверженное ошибкам. Очевидно, я пытаюсь ограничить объем этих операций и инкапсулировать их в API более высокого уровня, но это все равно боль.
бит-биты С++, похоже, предлагают решение для этой проблемы, но, к сожалению, их хранилище .
NathanOliver упоминает std::bitset
, который в основном позволяет вам обращаться к отдельным битам целого числа с хорошим operator[]
, но не имеет аксессуаров для многобитовых полей.
Используя метапрограммирование и/или макросы, можно абстрагировать побитовые операции в библиотеке. Так как я не хочу изобретать колесо, я ищу библиотеку (желательно STL или boost), которая делает это.
Для записи я рассматриваю это для DNS resolver, но проблема и ее решение должны быть общими.
Изменить: короткий ответ: получается, что хранение битового поля является надежным на практике (даже если оно не предусмотрено стандартом), поскольку системные/сетевые библиотеки используют их, а yeild - хорошо управляемые программы при компиляции с помощью основного потока составители.