[問題] 關於UNION和16進位問題

看板C_and_CPP作者 (wodada)時間11年前 (2013/05/03 18:46), 編輯推噓1(1010)
留言11則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 輸出結果跟我想的不一樣 餵入的資料(Input):預期的正確結果(Expected Output): 12ab34cd 0xcd 0x34 0xab 0x12 錯誤結果(Wrong Output):程式碼(Code):(請善用置底文網頁, 記得排版) 1 #include <stdio.h> 2 3 union endian 4 { 5 int i; 6 unsigned char bytes[4]; 7 }; 8 union endian order; 9 10 int main(int argc,char* argv[]) 11 { 12 int i; 13 order.i=0x12ab34cd; 14 15 printf("%x\n",order.i); 16 17 for(i= 0;i<sizeof(int);i++) 18 printf("0x%x\t",order.bytes[i]); 19 20 printf("\n"); 21 return 0; 22 } 補充說明(Supplement): 印出結果是從0xcd開始往回印 可是為何不是從0x12開始印??? 此外,若改變第五行的unsigned char為char cd和ab印出來分別變成0xffffffcd,0xffffffab 感覺我的問題蠻簡單的 可是實在想不出為啥= =a 請各位前輩給個hint 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.3.96

05/03 18:49, , 1F
google endianness
05/03 18:49, 1F

05/03 18:51, , 2F
byte order: little/big endian
05/03 18:51, 2F

05/03 20:04, , 3F
首先要知道你寫這個程式的目的
05/03 20:04, 3F

05/04 11:07, , 4F
這程式是我照範例KEY的,結果我用紙筆寫下,再用電腦跑
05/04 11:07, 4F

05/04 11:08, , 5F
不過從網路上查到仍覺得只有一知半解,這程式有應用到啥
05/04 11:08, 5F

05/04 11:08, , 6F
地方嗎???
05/04 11:08, 6F

05/04 11:52, , 7F
這在嵌入式上控制io會比較有用到
05/04 11:52, 7F

05/04 12:35, , 8F
你的範例沒跟你說這是做什麼的嗎?
05/04 12:35, 8F

05/04 13:22, , 9F
範例說:不要問,很恐怖。
05/04 13:22, 9F

05/04 13:50, , 10F
沒有,因為這是某教學機構的範例,可能要報名他們班才知道...
05/04 13:50, 10F

05/04 13:51, , 11F
我只單純拿到講義而已....= =a
05/04 13:51, 11F
文章代碼(AID): #1HWvM9v9 (C_and_CPP)