想法其實很簡單:
(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資...