2

如果我有一个 IEEE 浮点十六进制 42F6E979,如何将其转换为十进制?我相信十进制表示 = 123.456001

4

4 回答 4

4

(大多数)汇编语言并没有真正强烈地强制执行类型,因此您只需使用该值初始化一个位置,然后将其视为/使用它作为浮点数。最简单的转换方法通常是这样的:

.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)您想要比单个整数表示的精度更高时,它可能会变得有点难看。

于 2010-10-08T15:57:00.830 回答
3

在测试自己的代码时,您可以使用此在线工具来检查您的答案。仅供参考,你是正确的,小数点是 123.45 ......

维基百科也有一篇有用的文章

于 2010-10-08T15:48:59.910 回答
1

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

于 2010-10-08T15:48:27.917 回答
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 函数。

于 2010-10-10T13:45:36.103 回答