[问题] Little/Big Endian判断

楼主: airwaves (airwaves)   2019-10-19 21:19:40
不好意思,问一个比较粗浅的问题>.<
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;
}
作者: jerryh001   2019-10-19 21:27:00
让他视为char array然后看p[0]写啥就知道是哪种了
作者: Schottky (顺风相送)   2019-10-19 23:01:00
这样才能把两个 byte 拆开来看啊另一个方法是用 union,虽说是换汤不换药,原理相同
作者: dces4212 (flawless)   2019-10-20 03:48:00
不强制转啊 只是编译器会警告 跟你说你把内存位置给不同资料型态的指标 换句话说 他在警告你这样在做valueof (dereference)操作的时候是取一个byte 而非4个byte
作者: lovejomi (JOMI)   2019-10-20 09:54:00
借此问个问题, short a=0xff00; char b=a;的值会因为endian而不一样吗?原理是什么
作者: LPH66 (-6.2598534e+18f)   2019-10-20 10:33:00
楼上这种不会因 endianess 而不同, 所以原 PO 问的这写法才会需要借用指标来做一个(其实标准没说行不行的)间接存取
作者: lovejomi (JOMI)   2019-10-20 12:07:00
看到这种转型的都觉得很可能是ub...到底是不是ub难道只能去查标准吗
作者: CoNsTaR ((const *))   2019-10-20 13:50:00
楼上也可以像 LPH66 大大一样通通背起来 XD
作者: ibmibmibm (BestSteve)   2019-10-22 16:13:00
转型成char*读内容是ub没错,要用memcpy复制出来https://www.youtube.com/watch?v=_qzMpk-22cc

Links booklink

Contact Us: admin [ a t ] ucptt.com