作者EngRookie (鲁骑)
看板C_and_CPP
标题[问题] 关於 casting (强制转换)
时间Thu May 4 19:55:21 2017
小弟又来问基础问题了 (掩面)
举个例子
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1493898924.A.884.html
1F:→ james732: 看起来是跟little/big endian有关 05/04 19:59
2F:→ EngRookie: 恩...就觉得怪怪的想请教大家一下 哈哈 05/04 20:01
3F:推 sodas500i: 画图不是就知道了吗呃 05/04 20:07
4F:→ pttworld: 其实都知道较低位元那只要弄懂机器那种存法就好了 05/04 20:15
5F:推 kokal: 你写的code是check big/little endian的一种方法 05/04 20:25
6F:推 steve1012: 因为你的电脑是这样存的 应该可以移动cage pointer 去 05/04 23:17
7F:→ steve1012: 找下一位 05/04 23:17
8F:→ steve1012: 现在大部分都是little endian 不过懂得怎麽判断也蛮好 05/04 23:17
9F:→ steve1012: 的 05/04 23:17
10F:→ steve1012: 还是有big endian 的机器 05/04 23:18
11F:推 Killercat: 不只机器,IPv4目前全都是跑Big Endian 05/05 08:23
12F:→ Killercat: 所以才会有一堆什麽htons这些东西 05/05 08:24
13F:推 s25g5d4: 我记得 ARM 是跑 Big Endian? 可是又好像有印象可以切换 05/05 21:37
14F:→ ah7675: ARM -> little, MIPS -> big 05/05 21:48
15F:→ ah7675: 网路传输统一big 又称network order 05/05 21:49
16F:→ descent: power pc 是 big endian, ppc mac 可以试试 05/06 11:18