Assembly 将IEEE浮点十六进制转换为十进制?
如果我有一个IEEE浮点十六进制42F6E979,如何将其转换为十进制?我相信十进制表示法是=123.456001请查看或调用您的环境中可能已经存在的库例程。这是一个经常被重新发明的轮子当你测试自己的代码时,你可以用它来检查你的答案。仅供参考,你是正确的,小数点是123.45 Wikipedia也有一个。大多数汇编语言并没有很强地强制执行类型,所以您可以使用该值初始化一个位置,然后将其作为浮点处理/使用。最简单的转换方法通常是:Assembly 将IEEE浮点十六进制转换为十进制?,assembly,floating-point,ieee-754,Assembly,Floating Point,Ieee 754,如果我有一个IEEE浮点十六进制42F6E979,如何将其转换为十进制?我相信十进制表示法是=123.456001请查看或调用您的环境中可能已经存在的库例程。这是一个经常被重新发明的轮子当你测试自己的代码时,你可以用它来检查你的答案。仅供参考,你是正确的,小数点是123.45 Wikipedia也有一个。大多数汇编语言并没有很强地强制执行类型,所以您可以使用该值初始化一个位置,然后将其作为浮点处理/使用。最简单的转换方法通常是: .data myfloat dd 042F6E979H myde
.data
myfloat dd 042F6E979H
mydec db 10 dup(?)
.code
mov ebx, offset mydec
fld myfloat
fbstp [ebx]
这实际上会产生二进制编码的十进制数,所以您必须将每个字节分成两位数进行显示。当然,这是针对x86的——大多数其他体系结构使这项工作变得有点困难。例如,在PowerPC上,您有
fctiw
,它只转换为整数(与x86first
的一般顺序相同)。要使用它,您通常需要乘以10的某个倍数以获得所需的小数位数,然后转换为整数,并将小数点放在结果的正确位置。当/如果1)您接近浮点数的范围限制,或者2)您需要比单个整数更高的精度时,它可能会变得有点难看。我将用C语言来完成这项工作,因为您没有提供语言
char hex[];
int *ptr;
for(int i = 0; i < 8; ++i)
{
&ptr += toNumber(hex[i]) << (i * 4);
}
float *value = (float*)ptr;
char十六进制[];
int*ptr;
对于(int i=0;i<8;++i)
{
&ptr+=toNumber(hex[i])什么汇编语言和体系结构?你指的是ascii吗?如何将二进制浮点转换为人类可读的ascii?究竟&ptr+=…
应该做什么?运算符的地址不给你一个左值。你指的是*(ptr++)之类的东西吗=某物
?如何初始化ptr
?