[問題] 關於 casting (強制轉換)

看板C_and_CPP作者 (魯騎)時間7年前 (2017/05/04 19:55), 編輯推噓5(5011)
留言16則, 10人參與, 最新討論串1/1
小弟又來問基礎問題了 (掩面) 舉個例子 unsigned short s = 600; //0000 0010 0101 1000 unsigned char c = (unsigned char) s; printf("char c = %d\n", c); //顯示截取到 0101 1000 char *ptrS = &s; //points to short s 但是大小改為char printf("*ptrS = %d\n", *ptrS); //一樣是指到 0101 1000 我知道這看起來有點理所當然 也大概知道這應該跟作業系統的記憶體分配有關係 但是我就是覺得怪怪的 為什麼 我的 c 跟 ptrS 不能指向 0000 0010 這個位址較高(?)的 byte 呢? 為什麼是指向較低位元(0101 1000)的部分呢? (其實我也不確定前八bits是高位元還是低位元 冏) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.196.10 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1493898924.A.884.html

05/04 19:59, , 1F
看起來是跟little/big endian有關
05/04 19:59, 1F

05/04 20:01, , 2F
恩...就覺得怪怪的想請教大家一下 哈哈
05/04 20:01, 2F

05/04 20:07, , 3F
畫圖不是就知道了嗎呃
05/04 20:07, 3F

05/04 20:15, , 4F
其實都知道較低位元那只要弄懂機器那種存法就好了
05/04 20:15, 4F

05/04 20:25, , 5F
你寫的code是check big/little endian的一種方法
05/04 20:25, 5F

05/04 23:17, , 6F
因為你的電腦是這樣存的 應該可以移動cage pointer 去
05/04 23:17, 6F

05/04 23:17, , 7F
找下一位
05/04 23:17, 7F

05/04 23:17, , 8F
現在大部分都是little endian 不過懂得怎麼判斷也蠻好
05/04 23:17, 8F

05/04 23:17, , 9F
05/04 23:17, 9F

05/04 23:18, , 10F
還是有big endian 的機器
05/04 23:18, 10F

05/05 08:23, , 11F
不只機器,IPv4目前全都是跑Big Endian
05/05 08:23, 11F

05/05 08:24, , 12F
所以才會有一堆什麼htons這些東西
05/05 08:24, 12F

05/05 21:37, , 13F
我記得 ARM 是跑 Big Endian? 可是又好像有印象可以切換
05/05 21:37, 13F

05/05 21:48, , 14F
ARM -> little, MIPS -> big
05/05 21:48, 14F

05/05 21:49, , 15F
網路傳輸統一big 又稱network order
05/05 21:49, 15F

05/06 11:18, , 16F
power pc 是 big endian, ppc mac 可以試試
05/06 11:18, 16F
文章代碼(AID): #1P2nQiY4 (C_and_CPP)