将IEEE float十六进制转换为十进制?

时间:2010-10-08 15:41:43

标签: assembly floating-point ieee-754

如果我有一个IEEE float hex 42F6E979,我该如何将其转换为十进制?我相信十进制表示是= 123.456001

4 个答案:

答案 0 :(得分:3)

在测试自己的代码时,可以使用this online tool检查答案。仅供参考,你是对的,小数是123.45 ......

维基百科也有useful article

答案 1 :(得分:3)

(大多数)汇编语言并没有真正强制执行类型,所以你只需用该值初始化一个位置,然后将其作为一个浮点处理/使用。最简单的转换方式通常是:

.data

myfloat dd 042F6E979H
mydec   db 10 dup(?)

.code

mov ebx, offset mydec    
fld myfloat
fbstp [ebx]

这实际上产生二进制编码的十进制数,因此您必须将每个字节拆分为两位数以便显示。当然,这是针对x86的 - 大多数其他架构使这项工作更加困难。例如,在PowerPC上,您有fctiw,它只是转换为整数(与x86 fist的顺序相同)。要使用它,通常乘以10的倍数来获得所需的小数位数,然后转换为整数,并在结果中的正确位置放置小数点。当/如果1)你接近浮点数范围的限制,或者2)你想要比单个整数中表示的精度更高时,它会变得有点难看。

答案 2 :(得分:1)

请参阅Wikipedia或调用您环境中可能已存在的库例程。这是一个经常重新发明的车轮

答案 3 :(得分:0)

我会在C中这样做,因为你没有提供语言。

char hex[];
int *ptr;
for(int i = 0; i < 8; ++i)
{
   &ptr += toNumber(hex[i]) << (i * 4);
}

float *value = (float*)ptr;

我将把它留给OP来编写toNumber函数。