小端模式:高位字節(jié)存在高位地址上
用來判斷大端模式和小端模式的代碼如下
//獲取CPU大小端模式,結(jié)果保存在cpu_endian里面
void find_cpu_endian(void)
{
int x=1;
if(*(char*)&x==1)cpu_endian=0;
//小端模式
else cpu_endian=1; //大端模式
}
if(*(char*)&x==1)解釋一下這一句.
&x:取x的地址
(char*)&x:將x的地址變成char類型的指針.指向的內(nèi)容截取了int
x中的第一個字節(jié)上的內(nèi)容.
(*(char*)&x==1):取出指針的內(nèi)容判斷是否與1相同
來看看匯編代碼
ldrb r1,[r0,#0x00] //加載r0中的無符號字節(jié)數(shù)據(jù)到r1
cmp r1,#0x01 bne
0x08000266
//判斷r1中的值是否為1不是跳轉(zhuǎn)到266
movs r1,#0x00
//給r1寄存器寫零
ldr r2,[pc,#176]
//pc指針?biāo)诘牡刂芳由?176得到的地址保存在r2上
strb r1,[r2,#0x00]
//把r1的值保存在r2中的地址上返回endian的值