作者wodada (wodada)
看板C_and_CPP
標題[問題] 關於UNION和16進位問題
時間Fri May 3 18:46:30 2013
開發平台(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
→ azureblaze:google endianness 05/03 18:49
→ mail6543210:byte order: little/big endian 05/03 18:51
推 DarkPrincex:首先要知道你寫這個程式的目的 05/03 20:04
→ wodada:這程式是我照範例KEY的,結果我用紙筆寫下,再用電腦跑 05/04 11:07
→ wodada:不過從網路上查到仍覺得只有一知半解,這程式有應用到啥 05/04 11:08
→ wodada:地方嗎??? 05/04 11:08
→ diabloevagto:這在嵌入式上控制io會比較有用到 05/04 11:52
→ azureblaze:你的範例沒跟你說這是做什麼的嗎? 05/04 12:35
→ MOONRAKER:範例說:不要問,很恐怖。 05/04 13:22
→ wodada:沒有,因為這是某教學機構的範例,可能要報名他們班才知道... 05/04 13:50
→ wodada:我只單純拿到講義而已....= =a 05/04 13:51