网络字节序和主机字节序

大端字节序和小端字节序

大端字节序是符合人类阅读习惯的字节序高地址存在低位,低地址存在高位
小端字节序的排序方式对于cpu寻址更为便捷,低地址存在低位,高地址存在高位。

一个数据
0x01234567
大端字节序存储的方式是:
0x01234567
小端字节序存储的方式是:
0x67452301

如何测试主机字节序


void main()
{
	int a = 0x01234567;

	char* p = (char*)&a;

	printf("%x\n",*p);
	printf("%x\n", *++p);
	printf("%x\n", *++p);
	printf("%x\n", *++p);

}
//windows 输出
67
45
23
1
//kernel 4.4.0
67
45
23
1

为什么会有小端字节序

回忆一下,人类读取数字是怎么读的?

12345 读作**12345**
**是从高位到低位去读的**,读时候
1. 获取了**数据位数**
2. 获取了**数据每一位的数值**
这样才叫处理完这个数据了。

对于计算机而言呢

计算机从低位获取数据这样效率会比较高,因为他还涉及从低位做加法进位的问题呢,也就是说**计算机读取数据的时候是从个位->十位->百位->千位…**这样去读取的。

那么计算机读取数据是从低地址到高地址的,从0x0001…0x0002…0x0003这样去读的,那么自然他会这样去存储,即先存低位再存高位也就是小端字节序。
在这里插入图片描述

检测字节序方法,可以通过一个程序去实现:

void main()
{
	int a = 0x01234567;	
	char* p = (char*)&a;
	printf("%x,%02x\n",p,*p);
	printf("%x,%02x\n", p, *++p);
	printf("%x,%02x\n", p, *++p);
	printf("%x,%02x\n", p, *++p);
}
//printf %02x 补0两位十六进制
//printf %04o 补0四位八进制

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值