C语言知识小科普之大小端字节序

什么是大小端:

以int类型为例,C语言中一个int占4个字节,而内存中的存储是以按字节为单位的,那么就存在一个顺序的问题,无非就是按顺序存放,或者按倒序存放嘛。这里所说的大小端字节序简单来讲就是字节在内存中的存放顺序。大小端分别是什么规则呢?

  • 大端字节序:把一个数据的低位字节内容放在高地址处,高位字节内容放在低地址处
  • 小端字节序:把一个数据的高位字节内容放在高地址处,低位字节内容放在低地址处

如图所示,假设在内存中一个数据是 0x11223344 因为一个字节是八位,一个十六进制位表示四个二进制位,所以如果按 11 22 33 44 存,就是低字节在高地址,高字节在低地址的大端字节序,如果按 44 33 22 11 存,就是低字节在低地址,高字节在高地址的小端字节序。

查看:

接下来我们通过Visual Studio 2022观察一下我的电脑的数据是怎么存的。请看图!

a=10写成32位二进制序列是00000000 00000000 00000000 00001010 的十六进制是00 00 00 0a我们可以看到在这里 a 的低字节内容 0a 在低地址处,因此是小端存储

上图怎么来的?按 F10(Fn+F10)-> 调试 -> 窗口 -> 内存 -> 随便选一个 -> 输入&a 就可以观察a的地址的变化。

写一个判断大小端的函数:

#include<stdio.h>
int CheckSys()
{
	int a = 1;
	char* ret = (char*) & a;
	if (*ret == 1)
		return 1;
	else
		return 0;
}
int main()
{
	int ret = CheckSys();
	if (ret == 1)
		printf("小端\n");
	else if (ret == 0)
		printf("大端\n");
	return 0;
}

解释一下 ChackSys函数:

a=1 的 32位二进制序列是 00000000 00000000 00000000 00000001,如果是大端字节序则00000001 低字节存在高地址处,如果是小端字节序则 00000001 低字节存在低地址处,因此只需要拿出 a 的地址来看它存的第一个内容是什么就能判断到底是大端还是小端。

但是一个整型是四个字节怎么单独看它的第一个字节的内容呢,这时就需要用到char类型的指针来保存a的地址,因为char类型占一个字节,用char类型指向a的地址,再解引用,就只能看到那一个字节的内容,再判断这个内容,就很容易得到结果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值