字节序

常见的字节顺序有两种:
Big Endian(High-byte first)和Litter Endian(Low-byte first),当然还有其他字节顺序,但不常见,例如Middle Endian。

小端Little Endian:

低字节存放在低地址,低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。

大端Big Endian:

高字节存放在低地址,即高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。


大小端一般是由CPU架构决定,常见的Intel、AMD的CPU使用的是小端字节序,而PowerPC使用的是大端字节序,有些ARM处理器还可以选择用大端还是小端模式,具体请自行查阅。

c#中,字节序跟编译平台所在的CPU相关,例如在Intel x86 CPU架构的windows平台中,c#采用的小端序。
Java由于其JVM屏蔽了不同CPU架构导致的字节序差异,所以默认采用大端字节序。

所以,大小端模式是由CPU决定,而编译器又可能会改变这种模式。


网络字节序(Network Order):

TCP/IP各层协议将字节序定义为Big Endian,因此TCP/IP协议中使用的字节序通常称之为网络字节序。

主机字节序(Host Order):

整数在内存中保存的顺序。所以当两台主机之间要通过TCP/IP协议进行通信的时候就需要调用相应的函数进行主机序列和网络序(Big Endian)的转换。


在Unicode编码中有一个叫做ZERO WIDTH NO-BREAK SPACE的字符,它的编码是FEFF。UCS(Unicode的学名)规范建议我们在传输字节流前,先传输字符ZERO WIDTH NO-BREAK SPACE

这样我们根据收到字节FFFE的先后关系,就知道怎么解释接下来的字节流先后关系了。

posted @ 2018-12-21 09:55  xuejianbest  阅读(223)  评论(0编辑  收藏  举报