python数据包处理模块_Python3.4.3使用struct模块的pack、unpack对字节数据的处理(压包,解包)...

struct模块中主要有三个方法struct.pack(fmt,v1,v2,v3...)     按fmt这个格式把后面数据给封装成指定的数据

返回一个包含了v1,v2等的字节对象,数据是通过fmt格式化后的。参数必须和fmt需要格式化的完全对应起来

struct.unpack(fmt,buff)            按fmt这个格式把字节流转成原组tuple

pack的逆向操作,只有一个对象也返回tuple。

struct.calcsize(fmt)                  计算给定的fmt格式占用多少字节的内存

根据fmt的格式,返回需要的字节大小

下面是fmt这个格式python3.4.3的说明:(如果版本有更新请查看最新的)

https://docs.python.org/3/library/struct.html#format-characters

如下代码#视频加密

f = open('1.mp4', 'rb')

f2=open('2.mp4','wb')

try:

while True:

data = f.read(4)

if not data:

break

#解码出一个字节为integer类型

data=struct.unpack('i',data)

print(data)

#再把这个整形数据加1后再转成字节类型数据,保存到文件中

bit=struct.pack('i',data[0]+1)

print(bit)

f2.write(bit)

finally:

f.close( )

f2.close()

上面示例中:

功能为把一个视频文件按每4个字节取出来转成int类型然后加1,再转成字节类型保存到文件中,实现一个简单的文件加密

解密方法同样是把上面中的加1改成减1就还原成正常的文件啦

struct.pack()的使用方法

比如我们要把一个字符串  HTTP/1.1 200 OK   转成字节流形式的数据data=struct.pack('9si2s',b'HTTP/1.1 ',200,b'OK')

9s代表9个字符,i代表是个整形,2s又是两个字符,后面的数据和前面的格式是对应的

同样转成字节流后,也需要把字节按一定的格式恩成我们想要的数据data=struct.pack('9si2s',data)

同样的,格式字符串要正确否则会出现错误

把数据转成二进制字节import struct

a=12.34

# 将a变为二进制

by=struct.pack('d',a)

print(by)

输出 b'\xaeG\xe1z\x14\xae(@'

把字节转成int数据import struct

bs = b'\xc4\xe3\xc4\xe3'

st=struct.unpack('i',bs)

print(st)

i 代表int类型4个字节

输出(-473635900,)import struct

bs = b'\xc4\xe3\xc4\xe3'

st=struct.unpack('h',bs)

print(st)

上面把格式写成h(short)类型  占二个字节但bs是四个字节所以,这里就会报错

struct.error: unpack requires a bytes object of length 2

如果改成2h(两个short类型)这样就表示啦四个字节的格式import struct

bs = b'\xc4\xe3\xc4\xe3'

st=struct.unpack('2h',bs)

print(st)

输出如下

(-7228, -7228)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值