作者airwaves (airwaves)
看板C_and_CPP
标题[问题] Little/Big Endian判断
时间Sat Oct 19 21:19:40 2019
不好意思,问一个比较粗浅的问题>.<
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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1571491182.A.B73.html
1F:推 jerryh001: 让他视为char array 10/19 21:27
2F:→ jerryh001: 然後看p[0]写啥就知道是哪种了 10/19 21:28
3F:推 Schottky: 这样才能把两个 byte 拆开来看啊 10/19 23:01
4F:→ Schottky: 另一个方法是用 union,虽说是换汤不换药,原理相同 10/19 23:02
5F:→ dces4212: 不强制转啊 只是编译器会警告 跟你说你把记忆体位置给 10/20 03:48
6F:→ dces4212: 不同资料型态的指标 换句话说 他在警告你这样在做value 10/20 03:48
7F:→ dces4212: of (dereference)操作的时候是取一个byte 而非4个byte 10/20 03:48
8F:→ dces4212: 10/20 03:48
9F:推 lovejomi: 借此问个问题, short a=0xff00; char b=a;的值会因为en 10/20 09:54
10F:→ lovejomi: dian而不一样吗?原理是什麽 10/20 09:54
11F:推 LPH66: 楼上这种不会因 endianess 而不同, 所以原 PO 问的这写法 10/20 10:33
12F:→ LPH66: 才会需要借用指标来做一个(其实标准没说行不行的)间接存取 10/20 10:34
13F:推 lovejomi: 看到这种转型的都觉得很可能是ub...到底是不是ub难道只 10/20 12:07
14F:→ lovejomi: 能去查标准吗 10/20 12:07
15F:推 CoNsTaR: 楼上也可以像 LPH66 大大一样通通背起来 XD 10/20 13:50
16F:推 ibmibmibm: 转型成char*读内容是ub没错,要用memcpy复制出来 10/22 16:13