[問題] 為何這會變成反向的輸出??

看板C_and_CPP (C/C++)作者 (葵)時間13年前 (2012/12/18 23:55), 編輯推噓0(0015)
留言15則, 4人參與, 最新討論串1/1
先貼code給各位看看 unsigned int a = 0x414243;//hex表示方式 char* cc= (char*)(&a); //cc字元指標指向a的address printf("%s\n", cc); 我知道如果是把int數字丟給char的話,會根據ascii轉成字元輸出, 請問輸出為何會是 => CBA, 而不是ABC,或是其它?? 是因為指標一次移動一個byte嗎?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.136.68.179

12/19 00:04, , 1F
Little endian
12/19 00:04, 1F

12/19 00:12, , 2F
意思是compiler決定的事情,從後面一個byte開始抓?
12/19 00:12, 2F

12/19 00:23, , 3F
更底層一點, architecture 上 multi-byte int 從 lower byte
12/19 00:23, 3F

12/19 00:23, , 4F
放起
12/19 00:23, 4F

12/19 00:46, , 5F
Little endian在存放資料從LSB放起,所以unsigned int a
12/19 00:46, 5F

12/19 00:47, , 6F
0x414243在記憶體中被放成 {0x43,0x42,0x41,0x00}, 注意
12/19 00:47, 6F

12/19 00:48, , 7F
那個最後的"0x00", 因為unsigned int a = 0x414243 其實
12/19 00:48, 7F

12/19 00:49, , 8F
在記憶體中會佔去4 bytes,也就是說a=0x00414243,但你用
12/19 00:49, 8F

12/19 00:50, , 9F
char *去將原先存放unsigned int a的位置轉型成是要存
12/19 00:50, 9F

12/19 00:52, , 10F
char type的,所以cc會指向{0x43,0x42,0x41,0x00},也因為
12/19 00:52, 10F

12/19 00:53, , 11F
最後的0x00,你用printf("%s\n"...)印字串,會剛好只印CBA
12/19 00:53, 11F

12/19 00:54, , 12F
而沒有印出額外的東西...
12/19 00:54, 12F

12/19 00:55, , 13F
你這段程式如果放到Big endian的機器上compile後run,應
12/19 00:55, 13F

12/19 00:56, , 14F
該印不出CBA也印不出ABC,原因我不說,你舉一反三囉!
12/19 00:56, 14F

12/21 00:36, , 15F
thanks, 果然高手如雲,讓我消化一下
12/21 00:36, 15F
文章代碼(AID): #1Gq987BX (C_and_CPP)
文章代碼(AID): #1Gq987BX (C_and_CPP)