字节序:大端字节序(Big Endian) & 小端字节序(Little Endian)

一、什么是字节序?

多字节数据存储在存储器中的顺序就叫做字节序。字节序又分为俩种,一种叫做小端字节序;另外一种叫做大端字节序。

二、大端字节序(Big Endian)& 小端字节序(Little Endian)

大端字节序:在大端字节序的机器中,首先会存储多字节数据类型的二进制表示的第一个字节;
小端字节序:在小端字节序的机器中,首先会存储多字节数据类型的二进制表示的最后一个字节;

我们用32位机器存储int型变量0x12345678为例
数据在内存中的布局
简单的总结大小端存储方式:

  • Big Endian 是指低地址端 存放 高位字节。
  • Little Endian 是指低地址端 存放 低位字节。

三、用代码实现查看大小端

#include <stdio.h>
#include <stdlib.h>

void show_mem_rep(char *start, int n){
	int i;
	for (i = 0; i < n; i++){
		printf("%.2x  ", start[i]);
	}
	printf("\n");
}

int main(){
	int i = 0x12345678;
	show_mem_rep((char*)&i, sizeof(i));
	system("pause");
	return 0;
}

我们预测一下会发生输出结果:
大端机器输出:12 34 56 78
小端机器输出:78 56 34 12

运行结果:
在这里插入图片描述
从运行结果看,本地机器为小端机器。

有没有快速的方法来确定您的机器的字节顺序?

#include <stdio.h>
#include <stdlib.h>

int main(){
	unsigned int i = 1;
	char *c = (char*)&i;
	if (*c)	//如果*c为1,那么就为小端
		printf("这是小端序\n");
	else	//*c为0,为大端
		printf("这是大端序\n");

	system("pause");
	return 0;
}

代码解读: 在上面的程序中,字符指针c指向整数i。由于字符指针被解引用时字符的大小为1字节,因此它将仅包含整数的第一个字节。如果机器是小端,则* c将为1(因为最后一个字节存储在第一个),如果机器是大端,那么* c将为0.

四、字节序重要吗?

在网络编程中: (在网络中,网络传输以大端字节序为标准,所以在网络传输中都会先将数据转换为大端,接着再传输,所以显得尤为重要在这里) 假设我们在一个小端机器上写入整数文件并将此文件传输到大端机器,除非我人为的对大端机器做具有转换小端字节序的功能,否则大端机器将以相反的顺序读取文件。 (待续~~~)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值