为了确定系统的字节顺序,我计划将一个多字节整数值存储在一个变量中,并通过一个包裹在 a 中的来访问第一个字节;例如:unsigned char
union
union{
unsigned int val;
unsigned char first_byte;
} test;
test.val = 1; /* stored in little-endian system as "0x01 0x00 0x00 0x00" */
if(test.first_byte == 1){
printf("Little-endian system!");
}else{
printf("Big-endian system!");
}
我想让这个测试跨平台移植,但我不确定 C99 标准是否保证unsigned int
数据类型的大小大于一个字节。此外,由于“C 字节”在技术上不必是 8 位大小,因此我不能使用精确宽度的整数类型(例如uint8_t
、uint16_t
等)。
C99 标准是否保证任何 C 数据类型的大小至少为两个字节?
PS假设 anunsigned int
实际上大于一个字节,在所有 C99 兼容平台上,我的union
行为是否符合我的预期(变量first_byte
访问 variable 中的第一个字节)?val