PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
C_and_CPP
[问题] 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
继续阅读
[问题] 一维阵列 -> 二维函数
Hack
[问题] cin.ignore()无参数使用
jack41402
[问题] 为什么会segmentation fault?
d630200x
[问题] linux下执行c的命令参数问题
roger840410
[问题] zeromq 可以multithread多重订阅吗~
OfficeGL
[问题] c++ class作业 卡关
shiauyeu
[问题] 特殊的#define
Hack
Re: [问题] 有人做过粗糙表面的瑕疵检测吗?
Schottky
[问题] Network作业求教
D122
Re: [问题] 有人做过粗糙表面的瑕疵检测吗?
popen
Links
booklink
Contact Us: admin [ a t ] ucptt.com