我必须将浮点数从二进制转换为可用的十进制数。
当然我的浮点数已分成字节,总共4个字节
1 2 3 4
[XXXXXXXX] [XXXXXXXX] [XXXXXXXX] [XXXXXXXX]
这4个字节已经转换为十进制,所以我有例如
1 2 3 4
[0] [10] [104] [79]
现在Mantissa分为三个部分,两个最右边的字节(3& 4)和字节2但没有MSB位(那个很容易掩盖,所以我们假设我们有一个很好的十进制数字)。所以三个十进制数字。
对于这三个十进制数,是否有直接的数学转换到浮点尾数?
这就是说:如果我需要得到一个整数,那么公式就是
10 * 65536 + 104 * 256 + 79。
答案 0 :(得分:3)
将这些字节称为a
,b
和c
。我假设a
已被屏蔽,因此它只包含有效数字的位而不包含指数,并且该数字是IEEE-754 32位二进制浮点数,其中字节采用适当的字节顺序
如果原始指数字段为1到254(因此,不是0或255),则有效数字为:
1 + a*0x1p-7 + b*0x1p-15 + c*0x1p-23
或等同于:
(65536*a + 256*b + c) * 0x1p-23 + 1.
如果原始指数字段为0,则从总和中删除1(数字为次正常或零)。如果原始指数字段为255,则浮点值为无穷大(如果a
,b
和c
都为0)或NaN(否则为)。
答案 1 :(得分:2)
我无法提供太多帮助,因为自从我进行转换以来已经有一段时间了,但我希望您发现this tutorial有用。