C进阶 大小端字节序

字节序问题:
小端字节序: (0a 00 00 00) 数字的低位存到内存的低地址上 小(小端字节序) 小(数字低的) 小(低地址上)
大端字节序: (00 00 00 0a) 数字的低位存在内存的高地址上 大端字节序的方式比较像日常数学一样 (千位 百位 十位 个位)
一台机器大端或者小端取决于CPU

计算机存储中大小端字节序的判定
思路:

1.将整型变量的地址进行强制转换成 char*(char*是一个字节)
2.判定截取的地址是否和低地址这端相等(相等返回1,不相等返回0)

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

//返回值是1,证明是小端字节序.返回值是0,证明是大端字节序
int IsLittleEnd(){
	int num = 0x11113344;
	int* p = &num;
	char* p2 = (char*)p;
	if (*p2 == 0x44){
		return 1;
	}
	return 0;
}
int main(){

	printf("%d\n", IsLittleEnd());
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
指针变量涉及的信息:

1.内存对应的地址是那个地址(指针变量中存的数字决定的)
2.这个内存对应的大小(指针类型体现的)int* 占4个字节 char*占一个字节

指针的解引用

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

int main(){
	int num = 10;
	此处的*int是一个整体共同构成(int*)
	int* p = &num;
	此处的*是解引用,根据指针变量中存储的地址找到对应内存中的值.
	printf("%d\n",*p);

	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
联合体判定大小端字节序

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

union Un{
	int i;
	char c;
};
//typedef union Un un;
//返回1表示小端字节序
//返回0表示大端字节序
int IsLittleEnd(){
	union Un u;
	u.i = 0x11223344;
	if (u.c == 0x44){
		return 1;
	}
return 0;
}
int main(){
	int ret = IsLittleEnd();
	printf("返回1表示小端字节序,返回0表示大端字节\n");
	printf("%d\n", ret);
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值