| 知乎专栏 |
不同的场景使用不同的端序方案,不同的方案是不同历史时期,计算机厂商指定标准。
import struct
print("原生",struct.pack('@h', 1023))
print("标准",struct.pack('=h', 1023))
print("小端",struct.pack('<h', 1023))
print("大端",struct.pack('>h', 1023))
print("网络",struct.pack('!h', 1023))
输出结果
原生 b'\xff\x03' 标准 b'\xff\x03' 小端 b'\xff\x03' 大端 b'\x03\xff' 网络 b'\x03\xff'
import struct
format = '!HHH'
audio = struct.Struct(format)
print(f"{audio.size}")
encode = audio.pack(2,2000,65535)
print(f"{len(encode)}: {encode}")
输出结果
6 6: b'\x00\x02\x07\xd0\xff\xff'
char 存储的是字符,signed char / unsigned char 存储的是有符号和无符号整数,相当于 int(1) 长度,当我们需要标准大小为1的时候可以使用 signed char / unsigned char
import struct
data = struct.pack('c', b"A")
print(f"{len(data)},{data}") # 输出 1 字节
c = struct.unpack('c', data)
print(c)
# 打包一个 1 字节无符号整数 0~255
data = struct.pack('!B', 120)
print(f"{len(data)},{data}") # 输出 1 字节
num = struct.unpack('!B', data)
print(num)
输出结果
1,b'A' (b'A',) 1,b'x' (120,)
import shelve
with shelve.open("/var/tmp/test") as db:
db["hello"] = "helloworld"
with shelve.open("/var/tmp/test") as db:
for k, v in db.items():
print(k, ":", v)
import shelve, json
data = json.loads(json.dumps({"800": "AAAA", "900": "BBBB", "1000": "CCCC"}))
print(data, type(data))
with shelve.open("/var/tmp/test", "n") as db:
for k, v in data.items():
db[k] = v
with shelve.open("/var/tmp/test") as db:
for k, v in db.items():
print(k, ":", v)