1樓:兔老大公尺奇
四個位元組的十六機制陣列轉浮點數:
byte[bytes=newbyte[4];
bitconverter.tosingle(bytes,0)。
四位元組16進製製數可轉換為四個二進位制位元組(bytes),從而使用api函式來處理成單精度浮點數。以下用vb**處理。
vb有專門的api函式copymemory能處理2-10進製浮點數轉換和10-2進製浮點數轉換。
擴充套件資料
例:char p[4] = ; 轉換成浮點數:0.0205140,還有如何判斷,這四個十六進位制轉換成浮點數是正數還是負數。
#include
int main(void)
; int i = 0;//printf("b1:%d\n",b);
for(i = 0; i<4; i++)
//printf("b2:%d\n",*b);
printf("結果為:\n");printf("%f\n", a);
//printf("a:%d\n",a)
2樓:文件類共創空間
四位元組16進製製數可轉換為四個二進位制位元組(bytes),從而使用api函式來處理成單精度浮點數。
以下用vb**處理。
vb有專門的api函式copymemory能處理2-10進製浮點數轉換和10-2進製浮點數轉換。
下列**演示了10進製single(單精度浮點型轉為16進製制字元顯示的浮點數和其相反運算:
option explicit
private declare sub copymemory lib "kernel32" alias "rtlmovememory" (destination as any, source as any, byval length as long)
private sub bintosin_click()
dim sinstr as string
dim sinsj as single
dim buffer(3) as byte
dim i as integer
sinstr = text2
for i = 1 to len(text2) step 2
next
copymemory byval varptr(sinsj), byval varptr(buffer(0)), 4
text3 = sinsj
end sub
private sub sintobin_click()
dim i as integer
dim hexdata as string
dim a as single
dim buffer(3) as byte
a = val(text1)
copymemory buffer(0), a, 4
for i = 0 to 3
if len(hex(buffer(i))) = 1 then
hexdata = "0" & hex(buffer(i)) + hexdata
else
hexdata = hex(buffer(i)) + hexdata
end if
next
text2 = hexdata
end sub
需要注意的事項是這四位元組的高低位元組排序,不能搞錯。
vb的single 資料型別:
single(單精度浮點型)變數儲存為 ieee 32 位(4 個位元組)浮點數值的形式,它的範圍在負數的時候是從 -3.402823e38 到 -1.401298e-45,而在正數的時候是從 1.
401298e-45 到 3.402823e38。single 的型別宣告字元為感嘆號 (!
)。在記憶體以32位二進位制形式存在:
******xx ******xx ******xx ******xx
第1位為符號位;
第2-9位為階碼位;
第10-32位為2進製小數尾值;
即f2 ^ n * 1. ******x ******xx ******xx;
其中,f為正號或負號(首為為0正數,首位為1負數;
n為2-9位組成的byte資料值;
******x ******xx ******xx為尾數。
參考
3樓:匿名使用者
上面提供的方法((float)i;)都存在乙個問題,即只是把整數強制轉換為浮點數罷了,並不能解決樓主關心的問題。
有個簡單的辦法:
dword dwvalue = 0xc2c7fae1;
float fvalue;
printf("%f\n", fvalue);
4樓:匿名使用者
int i = 0xc2c7fae1;
float f = (float)i
5樓:匿名使用者
參考ieee單雙精度浮點數的標準格式。0xc2c7fae1是乙個32位的數字,使用單精度浮點數的格式來解析,最低位第0位到第22位為尾數,第23位到第30位為指數,31位為符號位。
c2c7fae1二進位制值為:
11000010110001111111101011100001其符號位為1(負號)
指數為10000101(實際為它減去1111111等於110)尾數為10001111111101011100001(帶有乙個隱含的「1.」)
真實值為:【符號】×【1.尾數】×( 2^【指數-127】)因此,它表示-1.10001111111101011100001×10^(110)(二進位制原碼)或者
-1100011.11111101011100001
將二進位製數1111轉化成八進位制等於多少我要寫
方法1 一位八進位制資料等於3位二進位制資料,那麼將二進位制每3位進行一次歸併可得到八進位制資料 11110010.101可寫成011 110 010.101歸併 每3位轉換成十進位制資料 後的八進位制資料為362.5 方法2 先轉換成十進位製數然後再轉換成八進位制 128 64 32 16 8 4...
100轉化成十六進位制是多少,110100B是二進位制還是十六進位制,轉換成十進位制是多少
100 十進位制 64 十六進位制 十進位制整數化十六進位制的通用計算方法 用16整除十進位制整數,可以得到乙個商和餘數 再用16去除商,又會得到乙個商和餘數,如此進行,直到商為小於1時為止,然後把先得到的餘數作為十六進位製數的低位有效位,後得到的餘數作為十六進位製數的高位有效位,依次排列起來,得到...
十進位制0 625轉化成二進位制是多少?帶上步驟
答案是 0.625 0.101 2。十進位制,即1.滿十進一,滿二十進二,以此類推 2.按權,第一位權為10 0,第二位10 1 以此類推,第n位10 n 1 該數的數值等於每位位的數值 該位對應的權值之和。二進位制是計算技術中廣泛採用的一種數制。二進位制資料是用0和1兩個數碼來表示的數。它的基數為...