Извлечение битового поля со структурой и порядком байтов в C

Для числового выражения любого типа:

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

Используйте три части для трех случаев: положительные, отрицательные, ноль

Другие аспекты примера:

  • Zero не подписан. Вы могли бы показать это как что угодно, например «нуль».
  • Абсолютные значения, меньшие единицы, имеют ведущее значение 0 до десятичной точки. Откорректируйте вкус.
  • Число цифр - для самых больших и наименьших абсолютных десятичных значений. Откорректируйте вкус.
  • Символ десятичной точки зависит от культуры. .NET заменяет.
  • Группировочные разделители являются необязательными. Характер специфичен для культуры. .NET заменяет. (Позиции также зависят от культуры, но это контролируется только вашей строкой формата.) Вы также используете любой другой символ, кроме специальных символов для Format (включая:. # 0).
0
задан bleater 17 January 2019 в 03:19
поделиться

1 ответ

Помимо проблем с порядком байтов, у вас нет возможности узнать, где будет каждое битовое поле.

Согласно 6.7.2 Спецификаторам типов , параграф 11 стандарта C :

Реализация может выделить любую адресуемую единицу хранения, достаточно большую для хранения битовое поле. Если остается достаточно места, битовое поле, которое следует сразу за другим битовым полем в структуре, должно быть упаковано в смежные биты той же единицы. Если остается недостаточно места, определяется, является ли битовое поле, которое не умещается, в следующем блоке или перекрывает смежные блоки, определяется реализацией. Порядок распределения битовых полей в блоке (от старшего к младшему или от младшего к старшему) определяется реализацией. Выравнивание адресуемой единицы хранения не определено .

Если вам нужно точно знать, где находится бит в ваших данных, использование битовых полей полностью непереносимо, даже между различными компиляторами на одной платформе.

0
ответ дан Andrew Henle 17 January 2019 в 03:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: