Преобразовать IEEE с плавающей запятой в десятичную? - PullRequest
2 голосов
/ 08 октября 2010

Если у меня есть плавающий гекс IEEE 42F6E979, как мне преобразовать его в десятичную? Я считаю, что десятичное представление = 123.456001

Ответы [ 4 ]

3 голосов
/ 08 октября 2010

Пока вы тестируете свой собственный код, вы можете использовать этот онлайн-инструмент , чтобы проверить свой ответ. К вашему сведению, вы правы в том, что десятичное число составляет 123,45 ...

В Википедии есть полезная статья .

3 голосов
/ 08 октября 2010

(Большинство) язык ассемблера на самом деле не обеспечивает принудительное применение типов, поэтому вы можете просто инициализировать местоположение с этим значением, а затем использовать / использовать его как число с плавающей точкой.Самый простой способ конвертации - это что-то вроде:

.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) вам нужна большая точность, чем вы можете представить в одном целом числе.

1 голос
/ 08 октября 2010

См. Википедию или вызовите библиотечную процедуру, которая, вероятно, уже существует в вашей среде.Это колесо часто переизобретается

0 голосов
/ 10 октября 2010

Я сделаю это на C, потому что вы не предоставили язык.

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

float *value = (float*)ptr;

Я оставлю это на OP, чтобы написать функцию toNumber.

...