字节序:字节顺序又称端序或尾序(Endianness),在计算机科学领域中,指电脑内存中或在数字通信链路中,组成多字节的字的字节的排列顺序。
在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如在 C 语言中,一个类型为 int 的变量 x 地址为 0x100,那么其对应地址表达式 &x 的值为 0x100,x 的四个字节将被存储在电脑内存的 0x100,0x101,0x102,0x103 位置。
字节的排列方式常见的方式有两种:将一个多位数的低位放在较小的地址处,高位放在较大的地址处,则称小端序(Little-Endian);反之则称大端序(Big-Endian)。
在网络应用中字节序是一个必须被考虑的因素,对于不同 CPU
可能采用不同标准的字节序,所以均按照网络标准转化成相应的字节序。
Little-Endian:将低序字节存储在起始地址(低位编址),在变量指针转换的时候地址保持不变,比如 int64* 转到 int32*,对于机器计算来说更友好和自然。
Big-Endian:将高序字节存储在起始地址(高位编址),内存顺序和数字的书写顺序是一致的,对于人的直观思维比较容易理解,网络字节序统一规定采用 Big-Endian。
检测字节序:一般情况下我们直接调用宏定义 __BYTE_ORDER
即可,可以通过引用 <bits/endian.h>
即可。或者我们也可以编写程序来判断当前的字节序。
-
字节序转换:
在程序中字节序转换时,我们将高位与低位依次进行交换即可完成,以下为整数的字节序转换。
在一个n进制的位中,最左边的位叫最高有效位,最右边的叫最低有效位。
大小端一般是由CPU架构决定的。
网络字节序(Network Order):TCP/IP各层协议将字节序定义为Big Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。
主机字节序(Host Order):整数在内存中保存的顺序,它遵循Little Endian规则(不一定,要看主机的CPU架构)。所以当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机序列(Little Endian)和网络序(Big Endian)的转换。
标签:小端,Little,顺序,字节,Big,C++,地址,Endian,大端 From: https://www.cnblogs.com/acec/p/16794313.html