此模块可以执行 Python 值和以 Python bytes
对象之间的转换
https://www.liaoxuefeng.com/wiki/1016959663602400/1017685387246080
import struct
import sys
from io import BytesIO;
s = b'\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00'
d1 = struct.unpack('<2sIIIIIIHH', s)
print(d1)
print("&"*10)
d1 = struct.unpack('<2cIIIIIIHH', s)
print(d1)
print(d1[0] + d1[1])
io1 = BytesIO()
io1.write(d1[0])
io1.write(d1[1])
print(str(io1.getvalue().decode("utf-8")))
print("-" * 10)
print(sys.byteorder)
record = b'raymond \x32\x12\x08\x01\x08'
name, serialnum, school, gradelevel = struct.unpack('<10sHHb', record)
print(name, serialnum, school, gradelevel)
print("+" * 10)
print(struct.pack('cq', b'*', 0x12131415)) # b'*\x00\x00\x00\x00\x00\x00\x00\x15\x14\x13\x12\x00\x00\x00\x00'
print(struct.pack('qc', 0x12131415, b'*')) # b'\x15\x14\x13\x12\x00\x00\x00\x00*'
print(struct.pack('>cq', b'*', 0x12131415)) # b'*\x00\x00\x00\x00\x12\x13\x14\x15'
print(struct.pack('>qc', 0x12131415, b'*')) # b'\x00\x00\x00\x00\x12\x13\x14\x15*'
print(struct.calcsize('ci')) # 8
print(struct.calcsize('ic')) # 5
print(struct.calcsize('>ci')) # 5
print(struct.calcsize('<ci')) # 5
print("=" * 10)
s = b'*\x00\x00\x00\x00\x12\x13\x14\x15'
print(struct.unpack(">cq", s)) # (b'*', 303240213)
print('0x%x' % struct.unpack(">cq", s)[1]) # 16进制显示 0x12131415
print('0x%x' % struct.unpack("<cq", s)[1]) # 0x1514131200000000 顺序是倒的 最高的一个字节在前面
# print(struct.unpack("<cq",s))
# print(struct.unpack("=cq",s))
# print(struct.unpack("?cq",s))
(b'BM', 691256, 0, 54, 40, 640, 360, 1, 24)
&&&&&&&&&&
(b'B', b'M', 691256, 0, 54, 40, 640, 360, 1, 24)
b'BM'
BM
----------
little
b'raymond ' 4658 264 8
++++++++++
b'*\x00\x00\x00\x00\x00\x00\x00\x15\x14\x13\x12\x00\x00\x00\x00'
b'\x15\x14\x13\x12\x00\x00\x00\x00*'
b'*\x00\x00\x00\x00\x12\x13\x14\x15'
b'\x00\x00\x00\x00\x12\x13\x14\x15*'
8
5
5
5
==========
(b'*', 303240213)
0x12131415
0x1514131200000000
网友评论