看板 C_and_CPP 關於我們 聯絡資訊
不好意思,問一個比較粗淺的問題>.< 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
jerryh001: 讓他視為char array 10/19 21:27
jerryh001: 然後看p[0]寫啥就知道是哪種了 10/19 21:28
Schottky: 這樣才能把兩個 byte 拆開來看啊 10/19 23:01
Schottky: 另一個方法是用 union,雖說是換湯不換藥,原理相同 10/19 23:02
dces4212: 不強制轉啊 只是編譯器會警告 跟你說你把記憶體位置給 10/20 03:48
dces4212: 不同資料型態的指標 換句話說 他在警告你這樣在做value 10/20 03:48
dces4212: of (dereference)操作的時候是取一個byte 而非4個byte 10/20 03:48
dces4212: 10/20 03:48
lovejomi: 借此問個問題, short a=0xff00; char b=a;的值會因為en 10/20 09:54
lovejomi: dian而不一樣嗎?原理是什麼 10/20 09:54
LPH66: 樓上這種不會因 endianess 而不同, 所以原 PO 問的這寫法 10/20 10:33
LPH66: 才會需要借用指標來做一個(其實標準沒說行不行的)間接存取 10/20 10:34
lovejomi: 看到這種轉型的都覺得很可能是ub...到底是不是ub難道只 10/20 12:07
lovejomi: 能去查標準嗎 10/20 12:07
CoNsTaR: 樓上也可以像 LPH66 大大一樣通通背起來 XD 10/20 13:50
ibmibmibm: 轉型成char*讀內容是ub沒錯,要用memcpy複製出來 10/22 16:13