C++区分大小端模式

C++大小端模式

大小端含义

大端:低地址存放数据的高位,高地址存放数据的低位. 即CPU对操作数的存放顺序为高字节到低字节.

如存放数据0x123456:

数据: 0x56 | 0x34 | 0x12
地址: 0x01 | 0x02 | 0x03

小端:低地址存放数据的低位,高地址存放数据的高位. 即CPU对操作数的存放顺序为低字节到高字节.

如存放数据0x123456:

数据: 0x12 | 0x34 | 0x56
地址: 0x01 | 0x02 | 0x03

判断大小端

1.联合体判断:因为联合体的大小为联合体中所有数据当中类型最大那个类型的大小,则通过char和int可以判断.

#include<iostream>
using namespace std;
union A{
	char a;
	int b;
	/*
	char 占一个字节,int占四个字节
	所以联合体的大小为四个字节,且a b公用一块内存
	当对b赋值为1时,则b=0x00 00 00 01;
	当为大端模式时:读取a得到的值为0;
	当为小端模式时:读取a得到的值为1;
	*/
};
int main(){
	A U;
	U.b=1;
	if(U.a){
		cout<<"小端模式"<<endl;
	}
	else{
		cout<<"大端模式"<<endl;	
	}
	return 0;
}

2.通过对四字节的 int* 强转为一字节的 char*

#include<iostream>
using namespace std;
int main()
{
	int i = 1;
	//&i为i的地址,此时为int*类型
	//(char*)将int*强转为char*
	//*取该char*的内容
	if (*(char*)&i) {
		cout<<"小端模式"<<endl;
	}
	else{
		cout<<"大端模式"<<endl;	
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值