是否有标准投诉方法来表示ANSI(C89/90)C中的字节?我知道,大多数情况下,一个字符恰好是一个字节,但我的理解是,这不能保证是这种情况.另外,在C99标准中有stdint.h,但在C99之前使用了什么?
我特别想知道8位和"字节"(sizeof(x)== 1).
char
总是一个字节,但它并不总是一个八位字节.字节是存储器的最小可寻址单元(在大多数定义中),八位字节是8位存储器单元.
也就是说,对于所有实现,sizeof(char)
始终为1,但是CHAR_BIT
宏limits.h
定义了平台的字节大小,并且它并不总是8位.有些平台具有16位和32位字节,因此char
将占用更多位,但它仍然是一个字节.由于所需的范围char
至少为-127到127(或0到255),因此在所有平台上至少为 8位.
ISO/IEC 9899:TC36.5.3.4 sizeof运算符
...
sizeof运算符产生其操作数的大小(以字节为单位),该操作数可以是表达式或类型的带括号的名称.[...]
当应用于具有类型的操作数
char
,unsigned char
或signed char
,(或者它们的合格音响编版本)的结果是1.[...]
强调我的.
您总是可以在unsigned char中表示一个字节(如果您的意思是8位).它始终至少为8位,所有位都构成该值,因此8位值始终适合它.
如果你想要8位,我也认为你必须使用平台相关的方式.POSIX系统似乎需要支持int8_t.这意味着在POSIX系统上,char(因而是一个字节)总是8位.