В стандарте C99 строгая корреляция между байтами char
и размером объекта приведена в 6.2.6.1/4 "Представления типов - Общие сведения":
Значения, хранящиеся в объектах без битовых полей любого другого типа объекта, состоят из n × CHAR_BIT
битов, где n
- это размер объекта этого типа в байтах. Значение может быть скопировано в объект типа unsigned char [n]
(например, memcpy); результирующий набор байтов называется объектным представлением значения.
В стандарте C ++ такое же соотношение дано в 3.9 / 2 «Типы»:
Для любого объекта (кроме подобъекта базового класса) типа POD T, независимо от того, содержит ли объект допустимое значение типа T, базовые байты (1.7), составляющие объект, могут быть скопированы в массив char или unsigned char. Если содержимое массива char или unsigned char копируется обратно в объект, объект должен впоследствии сохранять свое первоначальное значение.
В C90, как представляется, явно не упоминается корреляция, но между определением байта, определением символа и определением оператора sizeof
можно сделать вывод, что char
тип эквивалентен байту.
Также обратите внимание, что количество бит в байте (и количество бит в char
) определяется реализацией - строго говоря, оно не должно быть 8 бит. И в другом месте в комментарии говорится, что DSP обычно имеют байты с числом битов, не равным 8.
Обратите внимание, что RFC и стандарты IETF обычно (всегда?) Используют термин «октет» вместо «байт», чтобы однозначно сказать, что единицы, о которых они говорят, имеют ровно 8 бит - не больше, не меньше.