您的位置:首页 > 编程语言 > Python开发

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

2016-04-05 15:14 706 查看
运行环境:
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中对于文本文件和二进制文件处理方式不尽相同,所以还要依据开发环境选择不同的处理方法,

参考链接:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: