[問題] Little/Big Endian判斷

看板C_and_CPP作者 (airwaves)時間5年前 (2019/10/19 13:19), 編輯推噓7(7010)
留言17則, 7人參與, 5年前最新討論串1/1
不好意思,問一個比較粗淺的問題>.< int main(void) { short int a = 0x1234; char *p = (char *)&a; =>為什麼一定要轉成char pointer呢? printf("p=%#hhx\n",*p); if(*p == 0x34) printf("Little endian \n"); else if(*p == 0x12) printf("Big endian \n"); else printf("Unknow endian \n"); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.44.64.61 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1571491182.A.B73.html

10/19 21:27, 5年前 , 1F
讓他視為char array
10/19 21:27, 1F

10/19 21:28, 5年前 , 2F
然後看p[0]寫啥就知道是哪種了
10/19 21:28, 2F

10/19 23:01, 5年前 , 3F
這樣才能把兩個 byte 拆開來看啊
10/19 23:01, 3F

10/19 23:02, 5年前 , 4F
另一個方法是用 union,雖說是換湯不換藥,原理相同
10/19 23:02, 4F

10/20 03:48, 5年前 , 5F
不強制轉啊 只是編譯器會警告 跟你說你把記憶體位置給
10/20 03:48, 5F

10/20 03:48, 5年前 , 6F
不同資料型態的指標 換句話說 他在警告你這樣在做value
10/20 03:48, 6F

10/20 03:48, 5年前 , 7F
of (dereference)操作的時候是取一個byte 而非4個byte
10/20 03:48, 7F

10/20 03:48, 5年前 , 8F
10/20 03:48, 8F

10/20 09:54, 5年前 , 9F
借此問個問題, short a=0xff00; char b=a;的值會因為en
10/20 09:54, 9F

10/20 09:54, 5年前 , 10F
dian而不一樣嗎?原理是什麼
10/20 09:54, 10F

10/20 10:33, 5年前 , 11F
樓上這種不會因 endianess 而不同, 所以原 PO 問的這寫法
10/20 10:33, 11F

10/20 10:34, 5年前 , 12F
才會需要借用指標來做一個(其實標準沒說行不行的)間接存取
10/20 10:34, 12F

10/20 12:07, 5年前 , 13F
看到這種轉型的都覺得很可能是ub...到底是不是ub難道只
10/20 12:07, 13F

10/20 12:07, 5年前 , 14F
能去查標準嗎
10/20 12:07, 14F

10/20 13:50, 5年前 , 15F
樓上也可以像 LPH66 大大一樣通通背起來 XD
10/20 13:50, 15F

10/22 16:13, 5年前 , 16F
轉型成char*讀內容是ub沒錯,要用memcpy複製出來
10/22 16:13, 16F

10/22 16:17, 5年前 , 17F
文章代碼(AID): #1Tgmrkjp (C_and_CPP)