Python中使用struct模块打包二进制数据

运行环境: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)的形式。

参考:
Python中使用struct模块打包二进制数据_第1张图片

Python中使用struct模块打包二进制数据_第2张图片

如果我们要讲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中对于文本文件和二进制文件处理方式不尽相同,所以还要依据开发环境选择不同的处理方法,

参考链接:
https://docs.python.org/2/library/struct.html

http://pythoncentral.io/encoding-and-decoding-strings-in-python-3-x/

http://wwty.iteye.com/blog/401414

你可能感兴趣的:(python,struct)