Python中使用struct模組打包二進位制資料

2021-07-10 23:36:44 字數 1405 閱讀 4798

執行環境:python3.4.3

demo.py:

f=open('s_data.bin','wb')

import struct

s=b'allen'

data=struct.pack('>i5si',7,s,8)

print(data)

f.write(data)

f.close()

a,b,c=struct.unpack('>i5si',data)

print(a,b,c)

b=b.decode('utf-8')

print(b)

f2=open('b.txt','w')

f2.write(b)

f2.close()

控制台輸出:

b'\x00\x00\x00\x07allen\x00\x00\x00\x08'

7 b'allen' 8

allen

[finished in 0.3s]

s_data.bin:

0000 0007 416c 6c65 6e00 0000 08
b.txt:

allen
python3.0中必須使用bytes字串處理二進位制檔案,所以在字串前加b識別符號即可,如:s=b'allen'pack函式第乙個引數是格式化字串,如上面的>i5si表示儲存格式為乙個整數,乙個5字元的字串,乙個整數,>表示按照高位在前(big-endian)的形式。

如果我們要講bytes字串轉換為unicode字串,需要b=b.decode('utf-8')

如果要解析乙個二進位制檔案的話:

demo.py:

import struct

f=open('s_data.bin','rb')

data=f.read()

print(data)

a,b,c=struct.unpack('>i5si',data)

print(a,b,c)

控制台輸出:

b'\x00\x00\x00\x07allen\x00\x00\x00\x08'

7 b'allen' 8

python2和python3中對於文字檔案和二進位制檔案處理方式不盡相同,所以還要依據開發環境選擇不同的處理方法,

C語言中使用struct實現陣列複製

在c語言中,直接在引數中宣告陣列變數是無法實現傳值傳參的,這時只會把陣列的首位址傳過去。將陣列放置到乙個struct中進行傳參,可以實現傳值的方式。例如下面的程式 include struct tag struct tag orange,lime,lemon struct tag twofold s...

和 在python中使用

給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2。請你找出這兩個有序陣列的中位數,並且要求演算法的時間複雜度為 o log m n 你可以假設 nums1 和 nums2 不會同時為空。示例 1 nums1 1 3 nums2 2 則中位數是 2.0 示例 2 nums1 1 2 ...

python中使用bp Python ocbp包

概述ocbpy是乙個python模組,它可以在aacgm座標和磁性之間進行轉換。相對於開闊地調整緯度和當地時間的座標系 閉合場線邊界 ocb 這對統計特別有用 磁極的研究,其中相對於固定磁座標的網格劃分 系統會導致不同物理區域的平均值,例如極光 和極冠測量。此座標繫在 chisham,g.2017 ...