Python IEEE754 二進位制字串轉浮點數

2021-10-14 15:41:49 字數 1775 閱讀 7887

想法其實很簡單:

(1)取符號位: 對應str[0]

(2)取階碼:對應str[1:9]

(3)取尾碼:對應str[9:]

(4)計算小數點位置

(5)根據小數點切分尾碼,分別計算整數和小數部分

(6)特殊情況處理:0,nan,無窮…

def convertexponent

(strdata)

:#階碼轉整數

return

int(strdata,2)

-127

def convercomplementtofixeddecimal

(fixedstr)

:#字串轉小數

count=

1 num=

0for ch in fixedstr:

if ch==

"1":

num+=2**

(-count)

count+=

1return num

def convercomplementtointeger

(fixedstr)

:#字串轉整數

return

int(fixedstr,2)

def convertfloatstr

(strdata)

: #ieee754 浮點字串轉float

if strdata==

"00000000"

:return

0.0 binstr="".

join

(hex2bin_map[i]

for i in strdata)

sign=binstr[0]

exponet=binstr[1:

9]#階碼

mantissa=

"1"+binstr[9:

]#尾數

fixedpos=

convertexponent

(exponet)

if fixedpos>=

0: #小數點在1後面

fixeddec=

convercomplementtofixeddecimal

(mantissa[fixedpos+1:

])#小數轉換

fixedint=

convercomplementtointeger

(mantissa[

:fixedpos+1]

)#整數轉換

else

: #小數點在1前面(原數在[

-0.99

,0.99

]範圍內)

mantissa="".

zfill

(-fixedpos)

+mantissa

fixeddec=

convercomplementtofixeddecimal

(mantissa[1:

])#小數轉換

fixedint=

convercomplementtointeger

(mantissa[0]

)#整數轉換

fixed=fixedint+fixeddec

if sign==

"1":

fixed=

-fixed

return fixed

操作二進位制寫入二進

操作二進位制 寫入二進位制 1 宣告變數 sqlite3 stmt stat 2 把sql語句解析到stat結構中去 sqlite3 prepare 3 繫結替換 sqlite3 bind blob 4 儲存到資料庫 int result sqlite3 step 5 釋放stat結構 sqlite...

mysql儲存二進位制 mysql 儲存二進位制資料

晚上小研究了下mysql儲存於讀取二進位制資料的功能。關鍵步驟為以下三點 最重要的一點 儲存二進位制資料的表的型別需要是blob型別 按長度不同分為tiny,media,long 插入二進位制資料時需要利用mysql real escape string函式對資料進行轉換 從資料庫中讀取二進位制資料...

mysql 二進位製流 用mysql儲存二進位制資料流

用mysql儲存二進位制資料流,閱讀用mysql儲存二進位制資料流,近日一專案遇到需要在db中儲存2進製資料流型別檔案的問題,發現常用的mysql api都用不了,再研究,方知有一套專門的api來幹這種資料,功能相當強大的說。以下即為範例 按照說明編譯即可用,稍加修改即可儲存2進製檔案 mysql資...