怎么将4字节16进制转化成浮点数
展开全部
1、4字节指的是有4个内存单元,每个单元各放着一个0~255的整数,拼凑起来形成一个32个二进制位的数儿;
2、根据不同的视角来看待或理解这个数儿,可以得出很多不同的答案;
3、针对你的问题,其实是“将视角切换为单精度浮点数”,单精度浮点数在内存单元中如何表示,是个挺复杂的事儿,具体是国际电气标准ieee754规定的,如果你能看懂,绝对可以品味到其中的精彩,这个才是最核心的“原理”;
4、从你的描述上看,似乎也并不是想了解到最底层的透彻,仅仅是了解这段程序如何能工作,如果是这样的话,答案是:强制类型转换。(float*)&cbyte的意思是带上一副“单精度浮点数”的眼镜,去看cbyte数组中的内容,前面再加一个*,意思是“看好了,拿出来”。
2、根据不同的视角来看待或理解这个数儿,可以得出很多不同的答案;
3、针对你的问题,其实是“将视角切换为单精度浮点数”,单精度浮点数在内存单元中如何表示,是个挺复杂的事儿,具体是国际电气标准ieee754规定的,如果你能看懂,绝对可以品味到其中的精彩,这个才是最核心的“原理”;
4、从你的描述上看,似乎也并不是想了解到最底层的透彻,仅仅是了解这段程序如何能工作,如果是这样的话,答案是:强制类型转换。(float*)&cbyte的意思是带上一副“单精度浮点数”的眼镜,去看cbyte数组中的内容,前面再加一个*,意思是“看好了,拿出来”。
展开全部
上面提供的方法((float)i;)都存在一个问题,即只是把整数强制转换为浮点数罢了,并不能解决楼主关心的问题。
有个简单的办法:
DWORD
dwValue
=
0xC2C7FAE1;
float
fValue;
memcpy(&fValue,
&dwValue,
sizeof(DWORD));
printf("%f\n",
fValue);
有个简单的办法:
DWORD
dwValue
=
0xC2C7FAE1;
float
fValue;
memcpy(&fValue,
&dwValue,
sizeof(DWORD));
printf("%f\n",
fValue);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
参考IEEE单双精度浮点数的标准格式。0xC2C7FAE1是一个32位的数字,使用单精度浮点数的格式来解析,最低位第0位到第22位为尾数,第23位到第30位为指数,31位为符号位。
C2C7FAE1二进制值为:
11000010110001111111101011100001
其符号位为1(负号)
指数为10000101(实际为它减去1111111等于110)
尾数为10001111111101011100001(带有一个隐含的“1.”)
真实值为:【符号】×【1.尾数】×(
2^【指数-127】)
因此,它表示-1.10001111111101011100001×10^(110)(二进制原码)或者
-1100011.11111101011100001
C2C7FAE1二进制值为:
11000010110001111111101011100001
其符号位为1(负号)
指数为10000101(实际为它减去1111111等于110)
尾数为10001111111101011100001(带有一个隐含的“1.”)
真实值为:【符号】×【1.尾数】×(
2^【指数-127】)
因此,它表示-1.10001111111101011100001×10^(110)(二进制原码)或者
-1100011.11111101011100001
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询