中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在python中對二進制文件進行轉譯

發布時間:2021-02-26 15:35:54 來源:億速云 閱讀:206 作者:戴恩恩 欄目:開發技術

這篇文章主要介紹了如何在python中對二進制文件進行轉譯,此處通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考價值,需要的朋友可以參考下:

python是什么意思

Python是一種跨平臺的、具有解釋性、編譯性、互動性和面向對象的腳本語言,其最初的設計是用于編寫自動化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發獨立的項目和大型項目。

首先導入所需的包:import struct

struct有以下幾個主要的函數:

# 按照給定的格式(fmt),把數據封裝成字符串(實際上是類似于c結構體的字節流)
pack(fmt, v1, v2, ...)
# 按照給定的格式(fmt)解析字節流string,返回解析出來的tuple
unpack(fmt, string) 
# 計算給定的格式(fmt)占用多少字節的內存
calcsize(fmt)

例如:我需要讀取一個名為filename,存放著形狀為[100,1025]的浮點數的文件。可以采用以下辦法

import numpy as np
import struct 
# 加載測試數據
f = open('filename','rb')
# 102500為文檔中包含的數字個數,而一個浮點數占4個字節
data_raw = struct.unpack('f'*102500,f.read(4*102500))
f.close()
verify_data = np.asarray(verify_data_raw).reshape(-1,1025)

同理如果想轉把二進制轉成double型:

import numpy as np
import struct
f = open('data8.dat','rb')
d_str = f.read()
f.close()
d_len = len(d_str)
d_len2 = d_len//8
#有時還需考慮字節順序,如為big-endian,則以上語句改為 data = struct.unpack('>'+str(d_len/4)+'f',d_str)
data = struct.unpack(d_len2*'d',d_str)

注意:fmt前的數字必須為int型,即int*'d' 否則會報‘can't multiply sequence by non-int of type 'float'' 的錯誤

具體函數細節請查詢  struct官方文檔

下面提供了了fmt表示方法

FORMATPYTHON TYPESTANDARD SIZE
xno value
cstring of length 11
binteger1
Binteger1
?bool1
hinteger2
Hinteger2
iinteger4
Iinteger4
linteger4
Linteger4
qinteger8
Qinteger8
ffloat4
dfloat8
sstring
pstring
Pinteger

為了同c中的結構體交換數據,還要考慮有的c或c++編譯器使用了字節對齊,通常是以4個字節為單位的32位系統,故而struct根據本地機器字節順序轉換.可以用格式中的第一個字符來改變對齊方式.定義如下:

CHARACTERBYTE ORDERSIZEALIGNMENT
@nativenativenative
=nativestandardnone
<little-endianstandardnone
>big-endianstandardnone
!network (= big-endian)standardnone

< : Little-Endian就是低位字節排放在內存的低地址端(棧頂),高位字節排放在內存的高地址端(棧底)

>:Big-Endian就是高位字節排放在內存的低地址端,低位字節排放在內存的高地址端。

到此這篇關于如何在python中對二進制文件進行轉譯的文章就介紹到這了,更多相關如何在python中對二進制文件進行轉譯的內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贺州市| 太和县| 武宣县| 罗平县| 肇源县| 阜康市| 临城县| 长武县| 丹凤县| 永丰县| 盐津县| 湖口县| 固原市| 增城市| 嘉义县| 宁河县| 永康市| 泗洪县| 旺苍县| 湾仔区| 磴口县| 呼和浩特市| 济源市| 龙山县| 平原县| 清流县| 北宁市| 临沧市| 龙口市| 水富县| 四会市| 大宁县| 普安县| 晋城| 景洪市| 博罗县| 清水河县| 仁寿县| 新平| 天镇县| 巢湖市|