• 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)
     
  • 相关阅读:
    《DSP using MATLAB》 示例 Example 9.12
    《DSP using MATLAB》示例 Example 9.11
    《DSP using MATLAB》示例 Example 9.10
    《DSP using MATLAB》示例Example 9.9
    《DSP using MATLAB》示例 Example 9.8
    《DSP using MATLAB》示例Example 9.7
    《DSP using MATLAB》示例 Example 9.6
    《DSP using MATLAB》示例Example 9.5
    《DSP using MATLAB》示例 Example 9.4
    (转载)【C++11新特性】 nullptr关键字
  • 原文地址:https://www.cnblogs.com/jogger/p/2654376.html
Copyright © 2020-2023  润新知