閟truct就可以使用結(jié)構(gòu)體了:
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供觀山湖網(wǎng)站建設(shè)、觀山湖做網(wǎng)站、觀山湖網(wǎng)站設(shè)計(jì)、觀山湖網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、觀山湖企業(yè)網(wǎng)站模板建站服務(wù),10余年觀山湖做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
import struct
生成一個(gè)結(jié)構(gòu)體實(shí)例:
data = struct.pack( 'format_string', struct_menber_1, struct_menber_2, ... )
其中的format_string用來指定結(jié)構(gòu)體的格式(指明該結(jié)構(gòu)體在C中的定義),由兩部分組成:
首先是一個(gè)可選的特殊字符,用來指明字節(jié)序、數(shù)據(jù)類型大小和對(duì)齊方式:
@: native order, size alignment (default)
=: native order, std. size alignment
: little-endian, std. size alignment
: big-endian, std. size alignment
!: same as
然后是指明結(jié)構(gòu)體定義的部分:
The remaining chars indicate types of args and must match exactly;
these can be preceded by a decimal repeat count:
x: pad byte (no data); c:char; b:signed byte; B:unsigned byte;
h:short; H:unsigned short; i:int; I:unsigned int;
l:long; L:unsigned long; f:float; d:double.
Special cases (preceding decimal count indicates length):
s:string (array of char); p: pascal string (with count byte).
Special case (only available in native format):
P:an integer type that is wide enough to hold a pointer.
Special case (not in native mode unless 'long long' in platform C):
q:long long; Q:unsigned long long
Whitespace between formats is ignored.
如果struct模塊的函數(shù)出錯(cuò),將產(chǎn)生struct.error異常。
Python中沒有專門定義結(jié)構(gòu)體的方法,但可以使用class標(biāo)記定義類來代替結(jié)構(gòu)體,
其成員可以在構(gòu)造函數(shù)__init__中定義,具體方法如下。
復(fù)制代碼代碼如下:
class item:
def __init__(self):
self.name = '' # 名稱
self.size = 10 # 尺寸
self.list = [] # 列表
a = item() # 定義結(jié)構(gòu)對(duì)象
a.name = 'cup'
a.size = 8
a.list.append('water')
況如下:
打算從python發(fā)一個(gè)tcp數(shù)據(jù)包給遠(yuǎn)程服務(wù)器,數(shù)據(jù)的主體是一個(gè)c語言的
struct
(較大,size
為1402)。由于這個(gè)struct太復(fù)雜,故不打算在python
處對(duì)其重新定義,目前的想法是用python調(diào)用一個(gè)c語言的模塊,在這個(gè)模塊中定義這個(gè)struct,并設(shè)置好數(shù)據(jù)后,將其struct傳回python中,再打包傳送服務(wù)器。
但是不知道如何將這個(gè)struct
變量從c語言
傳入python中。嘗試用py_buildvalue函數(shù),以py_buildvalue("p",interface_setup)
//interface_setup為結(jié)構(gòu)體變量
傳遞,
但是幾次都得到運(yùn)行時(shí)錯(cuò)誤:
systemerror:
bad
format
char
passed
to
pybuildvaule。