在通讯层面分远程和本地通讯两种方式,因此就会产生通讯方面上数据作为载体的差异,
网络字节序:数值的存储采用大端法存储。数值高位存储在内存的低地址,数值低位存储在内存的高地址
数值的存储采用小端法存储。数值低位存储在内存的低地址,数值高位存储在内存的高地址
说白了就是在内存中字节的摆放顺序不同,每一个传输媒体都会存在差异,因此在数据传输过程时,需要注意字节序的先后关系
可以通过本地代码编程区分自身机器是大端的还是小端。
int main(int argc, char** argv)
{
union {
short s;
char c[sizeof(short)];
} un;
un.s = 0x0102;
if (sizeof(short) == 2) {
if (un.c[0] == 1 && un.c[1] == 2)
printf("big-endian\n");
else if (un.c[0] == 2 && un.c[1] == 1)
printf("little-endian\n");
else
printf("unknown\n");
}
exit(0);
}
为什么使用union来处理呢,首先你得了解一下union的特性,共用体,联合体,联合数据类型,和struct类似的一种数组类型,可以存放不同类型的数据,但是和struct又有很大的区别。union里面的成员变量公用一个内存首地址地址。所以给un.s赋值,相当于赋值给un.c