大端小端
#include <stdio.h>
int main(int argc, char *argv[])
{
int arr[] = {0x61626364, 0x65006667};
printf("%s\n", (char *)arr);
return 0;
}
如上所示,這段代碼輸出什麼?如果有錯誤,請解釋。
+––––––+ <--- arr
low | 0x64 | d
+––––––+
| 0x63 | c
+––––––+
| 0x62 | b
+––––––+
| 0x61 | a
+––––––+
| 0x67 | g
+––––––+
| 0x66 | f
+––––––+ <--- end
| 0x00 |
+––––––+
high | 0x65 | e
+––––––+
這個整型數組包含兩個元素,總共是八個字節,從上往下,地址增高。將數組中兩個整型按照小端的方式填入這八個字節,如上圖。現在arr指向數組的開始地址,printf從該地址開始,逐一輸出每個字符(字節),直到遇到'\0',也就是0x00,end所指向的地方。那麼從arr到end之間6個字節存的到底是什麼字符呢?這個可以查ASCII表得知,0x61是小寫字母a,以此類推。現在答案很明顯了,程序輸出:dcbagf。不知你猜中沒?