嵌入式程序,編譯器IAR,CPU 瑞薩
unsigned char a[]={0x01,0x02,0x03,0x04,0x05,0x06};
int test(void)
{
unsigned short *p=(unsigned short *)(&a[1]);
unsigned short temp=p[0];//此時編譯器Watch 裡面 p[0]=0x0302 temp=0x0201
if(0x0302==p[0])//走else
{
//do something
}
else
{
//do something
}
if(temp==p[0])//走if
{
//do something
}
}
求指教!!用大小端測試程序 結果為小端模式
請問p[0]的值應該為多少,為什麼watch裡面的值和程序實際使用的值不一樣
確實是小端模式,大端模式一般用在網絡傳輸中。你在程序中處理變量等,一般都是小端模式。
0x01, 0x02 這兩個char在數組中的位置前面在低字節、後面在高字節,你懂的,指向第一個指針加1才能訪問第二個
小段模式的特點就是低字節放在低位,那麼兩個char組成的short就應該是
0x0201了(0x01在低字節,所以放在了低位)
照此說來,watch中是對的,p[1]=0x0403
但是走了else分支,確實挺奇怪的,是不是哪裡搞錯了