如果一个变量的存储空间不止一个字节时,不同的系统可能会有不同的保存方式。
有的系统会把权重高的字节放在高地址,有的系统则会相反。
这种将多个字节的内容保存到一个变量里的不同方式就是字节序。
字节序,是指多字节的变量,使用哪一种顺序来存储每个字节。
先保存高位的字节,即big endian,也叫网络序。
先保存低位的字节,即little endian。
利用union来判断运行代码的系统是大端模式还是小端模式:
#include <stdio.h>
int main(int argc, char *argv[])
{
union {long i; char ch;}c;
c.i = 1;
printf("%s", (c.ch) ? "little endian" : "big endian");
return 0;
}
还有一种方式
/*endian macro: input a multi-byte parameter whose value is 1, output whether big-endian */
#define IF_BIG_ENDIAN(multi_bytes) (multi_bytes>>1?TRUE:FALSE)
可以定义一个多字节的变量,变量的值定义为1。
将这个变量作为参数传递给这个宏后,就可以返回当前系统是否为大端模式。
原理是:大端系统的多字节保存方式会把1这个值保存在MSB,这样向右移位一个bit后,结果依然不为0.