计算机中的大小端问题

所谓的大小端问题指的是计算机加载数据是内存实际存储顺序和数据本身的“高/低位”顺序是否一致的问题;当数据长度大于1时才有大小端的讨论意义;
在这里插入图片描述
在C语言(32位机)中short占2个字节,那么当我们定义一个short型(0x1234)的变量时就会向图1中的字节1和字节2写入两个字节;这时就有两种可能的情况:
1)字节1存储“0x12”,字节2存储“0x34”;【大端模式
2)字节1存储“0x34”,字节2存储“0x12”;【小端模式
如下图:
在这里插入图片描述

那么如何判断呢?这里我们很自然地就想到如果我们读到低地址的数据看他返回的是“0x12”还是“0x34”就可以得出相应的结论;
如下图:
在这里插入图片描述
那么此时我们就要用到一种特殊的数据结构——联合体【因为ch和sh占有相同的起始地址】;
代码如下:

#include <stdio.h>

typedef union{
    
    
	short sh;
	char ch;
}EndianTest;
int main()
{
    
    
	EndianTest testUnion;
	testUnion.sh = 0x1234;
	if(testUnion.ch == 0x34) {
    
    
		printf("Little-Endian.\n");
	} else {
    
    	
		printf("Big-Endian.\n");
	}
	
	return 0;
}

Guess you like

Origin blog.csdn.net/m0_37546257/article/details/121058253