python 中的struct

本文简单讲述python怎么生成和使用像C中的结构体

先上代码

复制代码
# im_netio.py
import socket
import struct

# server address
host = "172.16.100.136"
port = 8100
# head
head_len = 12
version = 6

def im_connect():
    s = socket.socket()
    s.connect((host, port))
    return s

def im_send(sock, pack):
    head = struct.pack('iii', head_len, len(pack), version)
    sock.send(head)
    plen = sock.send(pack)
    f = open('netio.txt', 'a')
    f.write('send:')
    f.write(pack)
    f.write('\n')
    f.close()

def im_recv(sock):
    buf = sock.recv(12)
    hlen, plen, version = struct.unpack('iii', buf)
    backlen = plen
    while plen > 0:
        buf = sock.recv(plen)
        plen -= len(buf)
    f = open('netio.txt', 'a')
    f.write('recv:')
    f.write(buf)
    f.write('\n')
    f.close()
    return buf
复制代码

封装了三个函数 im_connect im_send im_recv;

im_send先发送了一个包头,再发送数据,并将发送的内容(不包括包头)保存进本地文件。

实际上,包头就是C中的一个结构体:

复制代码
struct pack_head_st
{
    // 自身长度
    size_t              size;
    // 紧跟在自身后面的数据长度
    size_t              len;
    // 版本
    size_t              version;
}pack_head_t;
复制代码
head = struct.pack('iii', head_len, len(pack), version)
struct.pack就是将第一个参数之后的参数打包成一个结构体,格式就是第一个参数中的'iii',意为将三个int类型变量存进一个结构体,并返回为head。
然后发送,这个不用说了。

im_recv中,使用了struct.unpack,即struct.pack相对的解包函数。
打包与解包的格式如下表
FormatC TypePython typeStandard sizeNotes
x pad byte no value    
c char string of length 1 1  
b signed char integer 1 (3)
B unsigned char integer 1 (3)
? _Bool bool 1 (1)
h short integer 2 (3)
H unsigned short integer 2 (3)
i int integer 4 (3)
I unsigned int integer 4 (3)
l long integer 4 (3)
L unsigned long integer 4 (3)
q long long integer 8 (2), (3)
Q unsigned long long integer 8 (2), (3)
f float float 4 (4)
d double float 8 (4)
s char[] string    
p char[] string    
P void * integer   (5), (3)
 

posted on   jogger  阅读(340)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
< 2012年8月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

导航

统计

点击右上角即可分享
微信分享提示