大端规则和小端规则

一个int型整数,一般情况下占4个字节。那么这4个字节在内存中是怎么排列的呢?低内存地址存放的是低位字节还是高位子节呢?这就涉及到大端规则和小端规则。

这是一个特别小特别基础的知识点,在大部分的日常开发中,我们并不需要理会大小端规则。但是当涉及到跨平台网络数据传输的时候,就需要考虑大小端规则了。

大端规则(Big-Endian)

将高位字节存储在低位地址,低位字节存储在高位地址,这种存储方式成为大端规则,也称为大端序。

0xA1A2A3A4为例,使用大端规则,内存排列如下:

低地址 ——> ——> ——> ——> 高低地址
0xA1 0xA2 0xA3 0xA4

小端规则(Little-Endian)

将低位字节存储在低位地址,高位字节存储在高位地址,这种存储方式成为小端规则,也称为小端序。

0xA1A2A3A4为例,使用小端规则,内存排列如下:

低地址 ——> ——> ——> ——> 高低地址
0xA4 0xA3 0xA2 0xA1

网络子节序

不同平台使用不同的子节序。为了保证网络传输的数据能够被所有平台正确读取,TCP网络传输统一采用大端规则。

如果你使用C/C++/Objective-C语言,有几个方法可以方便将本地子节序和网络子节序互相转换。

     
     
// 网络子节序 -> 本地子节序
ntohs(x) // 转换short类型
ntohl(x) // 转换long类型
ntohll(x) // 转换long long类型
// 本地子节序 -> 网络子节序
htons(x) // 转换short类型
htonl(x) // 转换long类型
htonll(x) // 转换long long类型

Posted by 范杰(Jeffery Fan) · August 7th, 2016 
原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值