float型別和16進製制資料轉換

2021-08-10 19:08:35 字數 1029 閱讀 4790

先看一下ieee關於浮點數的定義:

ieee 754規定了四種表示浮點數值的方式:單精確度(32位元)、雙精確度(64位元)、延伸單精確度(43位元以上,很少使用)與延伸雙精確度(79位元以上,通常以80位元實做)。只有32位元模式有強制要求,其他都是選擇性的。

32位單精度

單精度二進位制小數,使用32個位元儲存。18

23 位長

***p

fraction

3130至23

偏正值 +127

22至0 位編號(從右邊開始為0)

s為符號位

exp為指數字

fraction為有效數字

指數部分即使用所謂的偏正值形式表示,實際值為表示值與乙個固定值(32位的情況是127)的和。採用這種方式表示的目的是簡化比較。因為,指數的值可能為正也可能為負,如果採用補碼表示的話,全體符號位s和exp自身的符號位將導致不能簡單的進行大小比較。正因為如此,指數部分通常採用乙個無符號的正數值儲存。單精度的指數部分是−126~+127加上127 ,指數值的大小從1~254(0和255是特殊值)。浮點小數計算時,指數值減去偏正值將是實際的指數大小。

例如有乙個浮點數是6.91,如何將其轉換為十六進製制呢?

首先將6.91轉換為二進位制形式:

110.111010001111010111000

將其規範化:調整使其實數第一位大於1小於2

6.91 =  1.10111010001111010111000 * 2^2

基本原型出來了

s:0exp : 2+127(10進製) =129(10進製) = 10000001(2進製)

fraction : 10111010001111010111000 (注意:小數點前面的1不要了)

組合一下: 0  10000001  10111010001111010111000

=  0100 0000 1101 1101 0001 1110 1011 1000

=  4       0        d      d       1       e       b       8

16進製制和float之間轉換

include float hex to decimal unsigned char byte,int num 十六進製製到浮點數 float pfvalue float cbyte return pfvalue return float byte 方法二 long floattohex float...

QT 串列埠接收的16進製制資料轉float

接收的資料採用qbytearray接收 qbytearray bytearray ba ba是讀取到的資料如 08 01 15 c3 c8 71 40 5a 其中08 01 15是表頭資訊,c3 c8 71 40是需要的資料,最後一位不管 qdatastream out bytearray,qiod...

C 中DateTime資料型別和16進製制的資料轉化

思路可以把datetime和乙個時間戳相減得到timespan型別,然後轉化成秒數得到byte陣列 由陣列轉化成tostring x2 反之則反,下面上 using system using system.collections.generic using system.text namespace...