CPU的大端模式(Big-endian)和小端模式(Little-endian)及判断方式

大端模式和小端模式指的是CPU存放变量的方式,即字节序:

对于小端模式的CPU:对操作数的存放方式是从低字节到高字节

例如, 0x12345678,低位字节为78,高位字节为12,小端模式存储方式为:

// 地址:操作数
0x2000: 0x78	
0x2001: 0x56
0x2002: 0x34	
0x2003: 0x12

对于大端模式的CPU:对操作数的存放方式是从高字节到低字节

例如, 0x12345678,低位字节为78,高位字节为12,大端模式存储方式为:

// 地址:操作数
0x2000: 0x12	
0x2001: 0x34
0x2002: 0x56	
0x2003: 0x78

因为联合体union的存放顺序是所有成员都从低地址开始存放,因此使用以下程序,可以检查CPU采用的读写模式:

#include <iostream>
using namespace std;

union w {
    
    
	int a;
	char b[4];
} u;

bool checkCPU() {
    
    
	u.a = 0x01020304; // 01 02 03 04, 低位字节 - 04
	printf("%0x%0x%0x%0x\n", u.b[0], u.b[1], u.b[2], u.b[3]);
	return u.b[0] == 0x04;
}

int main() {
    
    
	if (checkCPU()) {
    
    
		cout << "Little-endian" << endl;
	} else {
    
    
		cout << "Big-endian" << endl;
	}
    return 0;
}

输出:

4321
Little-endian

可以看到,联合体成员b的首字节为04,因此变量a的读取方式是从低字节到高字节,因此是小端模式。

谢谢阅读

猜你喜欢

转载自blog.csdn.net/weixin_43869898/article/details/111241614
今日推荐