php 字节序,TODO:字节序的一些理解

本文介绍了字节序的概念,包括小端和大端的存储方式,并通过0x01020304的例子展示了它们在内存中的布局。网络字节序通常采用大端,如TCP/IP协议规定。文中提到了不同平台如Intel X86(小端)和Sun SPARC(大端)的字节序差异,并指出C、Java、Go等语言的字节序特性。此外,还提供了一段Go代码来验证字节序,并强调了在跨平台交互时需要进行字节序转换的重要性。

TODO:字节序的一些理解

ccb0e3b4034235e99e99719194f236f7.png

本文是小编对字节序的片面理解,希望对你有帮助哈。字节序,即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前。

1.Little endian:将低序字节存储在起始地址,俗称小端

2.Big endian:将高序字节存储在起始地址,俗称大端

比如一个0x01020304(左高右低)这个整数,在小端下在内存中的布局如下

[04][03][02][01] 注意左边是低地址,而右边是高地址

在大端下则是

[01][02][03][04] 注意左边是高地址,而右边是低地址。

比较大端,小端的排序,采用大端方式存储数据是比较符合人类的思维习惯。

因为网上有些人对大端,小端的认识不一样;等下小编会写一段golang的代码来论证小端,大端排序的正确性。

网络字节序,是指网络传输的字节序,可能是大端序或者小端序,取决于软件开始时通讯双方的协议规定。TCP/IP协议RFC1700规定使用“大端”字节序为网络字节序,开发的时候需要遵守这一规则。

在现有的平台上Intel的X86采用的是Little-Endian,而像Sun的SPARC采用的就是Big-Endian。在C语言中,默认是小端(在有些单片机的实现中是基于大端,比如Keil 51C),Java是平台无关的,默认是大端,golang也是默认使用大端。不同语言各自采用不同的字节序,相互之间的传递需要进行字节序的转换工作。

最后,附上Golang对大小端的测试代码

d31cdc55667dc4e78069570310116242.png

输出:a: 305419896

BigEndian: 12 34 56 78

b: 305419896

c: 305419896

tt: 0x12345678

//tt输出0x123456,则表示Go使用大端。如果需要对小端测试只要把BigEndian改成LittleEndian即可,有兴趣可以试试。

有疑问加站长微信联系(非本文作者)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值