2010-10-08 183 views
2

如果我有一個IEEE浮動十六進制42F6E979,我該如何將它轉換爲十進制?我相信十進制表示法是= 123.456001將IEEE浮點十六進制轉換爲十進制?

+5

什麼彙編語言和體系結構? – 2010-10-08 15:45:24

+1

需要'家庭作業'標籤? – 2010-10-08 15:49:27

+0

你的意思是ascii?如何從二進制浮點轉換爲人類可讀的ascii? – 2010-10-09 05:11:12

回答

1

請參閱Wikipedia或調用可能已存在於您的環境中的庫例程。這是一個經常重新發明的輪子

3

當您測試自己的代碼時,可以使用this online tool來檢查您的答案。供參考,你是正確的,小數點是123.45 ...

維基百科也有一個useful article以及。

+1

+1爲鏈接到在線工具 - 非常有用。 – 2010-10-08 15:50:27

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)您想要的精度超過您在單個整數中可以表示的值時,它會變得有點難看。

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函數。

+0

'&ptr + ='應該做什麼?該地址的運營商不會給你一個左值。你的意思是'*(ptr ++)= something'的意思嗎? 'ptr'如何初始化? – 2015-09-29 07:07:02

相關問題