67、讲讲大端小端,如何检测

⼤端模式:是指数据的⾼字节保存在内存的低地址中,⽽数据的低字节保存在内存的⾼地址端。 ⼩端模式,是指数据的⾼字节保存在内存的⾼地址中,低位字节保存在在内存的低地址端。

直接读取存放在内存中的⼗六进制数值,取低位进⾏值判断

int a = 0x12345678;

int *c = &a;

c[0] == 0x12 ⼤端模式 

c[0] == 0x78 ⼩段模式

⽤共同体来进⾏判断

union 共同体所有数据成员是共享⼀段内存的,后写⼊的成员数据将覆盖之前的成员数据,成员数据都有相同的⾸地址。 Union 的⼤⼩为最⼤数据成员的⼤⼩。

union 的成员数据共⽤内存,并且⾸地址都是低地址⾸字节。 Int i= 1时:⼤端存储1放在最⾼位,⼩端存储1放在最低位。当读取char ch时,是最低地址⾸字节,⼤⼩端会显示不同的值。

#include<stdio.h>

  int main() {

 union { 

int a; //4 bytes

 char b; //1 byte

 } data; 1//占4 bytes,⼗六进制可表示为 0x 00 00 00 01  

//b因为是char型只占1Byte,a因为是int型占4Byte 

//所以,在联合体data所占内存中,b所占内存等于a所占内存的低地址部分

 if(1 == data.b) { 

//⾛到这⾥意味着说明a的低字节,被取给到了b 

//即a的低字节存在了联合体所占内存的(起始)低地址,符合⼩端模式特

printf("Little_Endian\n"); 

} else {

 printf("Big_Endian\n");

 } 

return 0;

 }

Last updated