📅  最后修改于: 2023-12-03 14:47:44.157000             🧑  作者: Mango
在Python中,struct
模块提供了一种类似于C语言中的struct
结构体的功能,可以用来创建不同字节顺序和不同数据类型的二进制数据。常常用于网络编程和文件处理等场合。
struct
模块import struct
格式化字符串是一个描述数据类型和字节顺序的字符串,以<
、>
、!
、@
、=
等开头,后跟若干个对应的数据类型字符。例如,<I
表示4
字节的unsigned int
类型,顺序为小端。具体的数据类型和对应的字符可以查看官方文档。
struct.pack()
将数据按照格式化字符串打包成二进制数据data = struct.pack('<I', 123)
struct.unpack()
将二进制数据按照格式化字符串解包成数据value = struct.unpack('<I', data)[0]
以下实例演示了一个简单的传输二进制数据的例子,其中客户端向服务端发送一个数值,服务端接收并加1
后返回给客户端。
客户端:
import socket
import struct
HOST = '127.0.0.1'
PORT = 5000
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(struct.pack('<I', 123))
data = s.recv(4)
value = struct.unpack('<I', data)[0]
print(value)
服务端:
import socket
import struct
HOST = '127.0.0.1'
PORT = 5000
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print('Connected by', addr)
data = conn.recv(4)
value = struct.unpack('<I', data)[0]
value += 1
conn.sendall(struct.pack('<I', value))
使用struct
时需要注意以下几点:
short
类型可以用h
和H
表示;struct
模块提供的不同类型的数据类型表示;<I
表示unsigned int
。