struct模块

"""
struct 模块是一个可以将任意大小的数字转换成一个固定长度编码的模块
例如 13321111 通过q 模式 转化之后是8个字节
133333 245 456 768 通过q 模式转化之后也是8个字节,不论数字大小
但是这个转化对数字的大小范围有一定的要求

i 模式转换的数字较小,转化之后的结果只有4个字节
q 模式转换的数字范围较大,转换之后的结果有8个字节

这个有点类似于hash算法,可以将不同长度的编码生成同样长度的编码
但是hash 算法是不可逆的,而且转化的材料可以是文本,字符串等很多类型
而这个struct 是可逆的 可以将转化pack之后的编码通过unpack反解出原来的数字
而且这个struct 只能转化数字,不能转化其他的字符串等类型


"""

import struct


## i 模式 4字节

obj1 = struct.pack('i', 13321)
print(obj1, len(obj1))
res1 = struct.unpack('i', obj1)
###得到的res 是一个元组,取第一个,就是原来的数字
print(res1)
print(res1[0])



print('===========================')
obj1 = struct.pack('q', 13321111)
res1 = struct.unpack('q',obj1)
print(res1)
print(res1[0])

print('===========================')

##同理,下面的这些数字也可以通过这个方法转换


obj2 = struct.pack('q', 1332111122)
obj3 = struct.pack('q', 133211113333)
obj4 = struct.pack('q', 13321111444444)
obj5 = struct.pack('q', 1332111144444444)
print(obj1, len(obj1))

print(obj2, len(obj2))
print(obj3, len(obj3))
print(obj4, len(obj4))
print(obj5, len(obj5))

原文地址:https://www.cnblogs.com/1832921tongjieducn/p/11352380.html