python 中的struct

來源:互聯網
上載者:User

本文簡單講述python怎麼產生和使用像C中的結構體

先上代碼

# im_netio.pyimport socketimport struct# server addresshost = "172.16.100.136"port = 8100# headhead_len = 12version = 6def im_connect():    s = socket.socket()    s.connect((host, port))    return sdef 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相對的解包函數。
打包與解包的格式如下表
Format C Type Python type Standard size Notes
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)
 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.