怎么在Python中使用结构体模块

  介绍

这篇文章给大家介绍怎么在Python中使用结构体模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在结构模块中最最常用的三个:,

(1) struct.pack:用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(字节)类型,可以把这里的字符串理解为字节流,或字节数组)。
(2)结构。解压缩:刚好与结构。包相反,用于将字节流转换成python数据类型,该函数返回一个元组。
(3)结构。calcsize:计算格式字符串所对应的结果的长度。

转换过程中遇到的格式操作:

格式符C语言类型Python类型xpad byteno valueccharstring长度1 bsigned charintegerBunsigned charinteger吗?_BoolboolhshortintegerHunsigned shortintegeriintintegerIunsigned intinteger或longllongintegerLunsigned longlongqlong longlongQunsigned长longlongffloatfloatddoublefloatschar [] stringpchar [] stringPvoid *长

实例详解:

# !/usr/bin/python   #,- *安康;编码:utf-8  - *   & # 39;& # 39;& # 39;测试结构模块& # 39;& # 39;& # 39;   得到struct  import  *   import 数组      def  fun_calcsize ():   print 才能;& # 39;ci: & # 39; calcsize (& # 39; ci # 39;) #计算格式占内存大小   print 才能;& # 39;@ci: & # 39; calcsize (& # 39; @ci& # 39;)   print 才能;& # 39;=ci: & # 39; calcsize (& # 39;=ci # 39;)   print 才能;& # 39;ci: & # 39;, calcsize(& # 39;在ci # 39;)   print 才能;& # 39;& lt; ci: & # 39; calcsize (& # 39; & lt; ci # 39;)   print 才能;& # 39;ic: & # 39; calcsize (& # 39; ic # 39;) #计算格式占内存大小   print 才能;& # 39;@ic: & # 39; calcsize (& # 39; @ic& # 39;)   print 才能;& # 39;=ic: & # 39; calcsize (& # 39;=ic # 39;)   print 才能;& # 39;ic: & # 39;, calcsize(& # 39;在ic # 39;)   print 才能;& # 39;& lt; ic: & # 39; calcsize (& # 39; & lt; ic # 39;)      def  fun_pack(格式,msg =, [0 x11223344, 0 x55667788]):   时间=result 才能;包(格式,*味精)   print 才能;& # 39;包# 39;.ljust (10), str(类型(结果)).ljust (20),   for 才能小姐:拷贝的结果:   ,,,print 十六进制(ord (i)), #,奥德把ASCII码表中的字符转换成对应的整形,十六进制将数值转化为十六进制   ,打印      result =,才能解压缩(格式,结果)   print  & # 39;才能打开# 39;.ljust (10), str(类型(结果)).ljust (20),   for 才能小姐:拷贝的结果:   ,,,print 十六进制(我),   print 才能;      def  fun_pack_into(格式,msg =, [0 x11223344, 0 x55667788]):   r 才能=,array.array (& # 39; c # 39; & # 39;, & # 39; * 8) #大小为8的可变缓冲区,writable 缓冲区   时间=result 才能;pack_into(格式、r 0 *味精)   print 才能;& # 39;pack_into& # 39; .ljust (10), str(类型(结果)).ljust (20),   for 才能小姐:拷贝r.tostring ():   ,,,print 十六进制(ord (i)),   ,打印      result 才能=,。(格式,r, 0)   print 才能;& # 39;pack_from& # 39; .ljust (10), str(类型(结果)).ljust (20),   for 才能小姐:拷贝的结果:   ,,,print 十六进制(我),   ,打印      def  IsBig_Endian ():   & # 39;才能& # 39;& # 39;判断本机为大/小端& # 39;& # 39;& # 39;   a 才能=0 x12345678   result =,才能包(& # 39;我# 39;)#此时结果就是一个字符串字符串,字符串按字节同一个的二进制存储内容相同。   if 才能;十六进制(奥德(结果[0])),==,& # 39;0 x78& # 39;:   ,,,print  & # 39;本机为小端& # 39;   其他的才能:   ,,,print  & # 39;本机为大端& # 39;      def 测试():   时间=a 才能;& # 39;1234 & # 39;   for 才能小姐:拷贝:   ,,,print  & # 39;字符% s的二进制:& # 39;%我,十六进制(奥德(我)#字符对应的ascii码表中对应整数的十六进制      & # 39;才能& # 39;& # 39;   unpack()不才能用返回的数据也是可以使用包()函数的,只要解包的字符串符合解包格式即可,   包()才能会按照解包格式将字符串在内存中的二进制重新解释(说的感觉不太好……,见下例)   & # 39;才能& # 39;& # 39;   print 才能;& # 39;大端:& # 39;十六进制(解压缩(& # 39;在我# 39;,a)[0]) #因为包返回的是元组,即使只有一个元素也是元组的形式   print 才能;& # 39;小端:& # 39;十六进制(解压缩(& # 39;& lt;我# 39;,a) [0])         if  __name__ ==,“__main__":   print  & # 39;才能判断本机是否为大小端? & # 39;   IsBig_Endian才能()      fun_calcsize才能()      print 才能;& # 39;大端:& # 39;   Format =,才能“祝辞ii"   fun_pack才能(格式)   fun_pack_into才能(格式)      print 才能;& # 39;小端:& # 39;   Format =,才能“& lt; ii"   fun_pack才能(格式)   fun_pack_into才能(格式)      print 才能;& # 39;测试# 39;   测试才能()   & # 39;才能& # 39;& # 39;   结果:才能   判才能断本机是否为大小端?,本机为小端   置信区间:才能8   @ci才能:8   ,,=ci: 5   祝辞才能ci: 5   & lt才能;ci: 5   集成电路才能:5   @ic才能:5   ,,=ic: 5   祝辞才能ic: 5   & lt才能;ic: 5   大才能端:   pack 才能,,,,& lt; type  & # 39; str # 39;在,,,,,0 x11  0 x22  0 x33  0 x44  0 x55  0 x66  0 x77  0 x88   unpack 才能,,,& lt; type  & # 39;元组# 39;在,,,,0 x11223344  0 x55667788   pack_into 才能;& lt; type  & # 39; NoneType& # 39;祝辞,,0 x11  0 x22  0 x33  0 x44  0 x55  0 x66  0 x77  0 x88   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Python中使用结构体模块