Python之struct详解

用处
  1. 按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送;
  2. 按照指定格式将字节流转换为Python指定的数据类型;
  3. 处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二进制(字节流)写,读的方式来处理文件;
  4. 处理c语言中的结构体;

struct模块中的函数

函数returnexplain
pack(fmt,v1,v2…)string按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回.
pack_into(fmt,buffer,offset,v1,v2…)None按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块)
unpack(fmt,v1,v2…..)tuple按照给定的格式(fmt)解析字节流,并返回解析结果
pack_from(fmt,buffer,offset)tuple按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果
calcsize(fmt)size of fmt计算给定的格式(fmt)占用多少字节的内存,注意对齐方式

格式化字符串

当打包或者解包的时,需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类型,除此之外,还有用于控制字节顺序、大小和对齐方式的特殊字符.

对齐方式

为了同c中的结构体交换数据,还要考虑c或c++编译器使用了字节对齐,通常是以4个字节为单位的32位系统,故而struct根据本地机器字节顺序转换.可以用格式中的第一个字符来改变对齐方式.定义如下

CharacterByte orderSizeAlignment
@(默认)本机本机本机,凑够4字节
=本机标准none,按原字节数
<小端标准none,按原字节数
>大端标准none,按原字节数
!network(大端)标准none,按原字节数

如果不懂大小端,见大小端参考网址.

格式符

格式符C语言类型Python类型Standard size
xpad byte(填充字节)no value 
ccharstring of length 11
bsigned charinteger1
Bunsigned charinteger1
?_Boolbool1
hshortinteger2
Hunsigned shortinteger2
iintinteger4
I(大写的i)unsigned intinteger4
l(小写的L)longinteger4
Lunsigned longlong4
qlong longlong8
Qunsigned long longlong8
ffloatfloat4
ddoublefloat8
schar[]string 
pchar[]string 
Pvoid *long 

注- -!

  1. _Bool在C99中定义,如果没有这个类型,则将这个类型视为char,一个字节;
  2. q和Q只适用于64位机器;
  3. 每个格式前可以有一个数字,表示这个类型的个数,如s格式表示一定长度的字符串,4s表示长度为4的字符串;4i表示四个int;
  4. P用来转换一个指针,其长度和计算机相关;
  5. f和d的长度和计算机相关;

进制转化:

# 获取用户输入十进制数
dec = int(input("输入数字:"))

print(“十进制数为:”, dec)
print(“转换为二进制为:”, bin(dec))
print(“转换为八进制为:”, oct(dec))
print(“转换为十六进制为:”, hex(dec))

  • 16进制转10进制: int(‘0x10’, 16)  >  16

Python没有专门处理字节的数据类型。但由于b’str’可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。

在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的bytes,你得配合位运算符这么写:


 
 
  1. >>> n = 10240099
  2. >>> b1 = (n & 0xff000000) >> 24
  3. >>> b2 = (n & 0xff0000) >> 16
  4. >>> b3 = (n & 0xff00) >> 8
  5. >>> b4 = n & 0xff
  6. >>> bs = bytes([b1, b2, b3, b4])
  7. >>> bs
  8. b’\x00\x9c@c’

非常麻烦。如果换成浮点数就无能为力了。

好在Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换。

structpack函数把任意数据类型变成bytes


 
 
  1. >>> import struct
  2. >>> struct.pack( ’>I’, 10240099)
  3. b’\x00\x9c@c’

pack的第一个参数是处理指令,’>I’的意思是:

>表示字节顺序是big-endian,也就是网络序,I表示4字节无符号整数。

后面的参数个数要和处理指令一致。

struct
阅读: 58181

准确地讲,Python没有专门处理字节的数据类型。但由于b’str’可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。

在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的bytes,你得配合位运算符这么写:


  
  
  1. >>> n = 10240099
  2. >>> b1 = (n & 0xff000000) >> 24
  3. >>> b2 = (n & 0xff0000) >> 16
  4. >>> b3 = (n & 0xff00) >> 8
  5. >>> b4 = n & 0xff
  6. >>> bs = bytes([b1, b2, b3, b4])
  7. >>> bs
  8. b’\x00\x9c@c’

非常麻烦。如果换成浮点数就无能为力了。

好在Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换。

structpack函数把任意数据类型变成bytes


  
  
  1. >>> import struct
  2. >>> struct.pack( ’>I’, 10240099)
  3. b’\x00\x9c@c’

pack的第一个参数是处理指令,’>I’的意思是:

>表示字节顺序是big-endian,也就是网络序,I表示4字节无符号整数。

后面的参数个数要和处理指令一致。

unpackbytes变成相应的数据类型:


  
  
  1. >>> struct.unpack( ’>IH’, b’\xf0\xf0\xf0\xf0\x80\x80’)
  2. ( 4042322160, 32896)

根据>IH的说明,后面的bytes依次变为I:4字节无符号整数和H:2字节无符号整数。

所以,尽管Python不适合编写底层操作字节流的代码,但在对性能要求不高的地方,利用struct就方便多了。

struct模块定义的数据类型可以参考Python官方文档:

https://docs.python.org/3/library/struct.html#format-characters

Windows的位图文件(.bmp)是一种非常简单的文件格式,我们来用struct分析一下。

首先找一个bmp文件,没有的话用“画图”画一个。

读入前30个字节来分析:

>>> s = b’\x42\x4d\x38\x8c\x0a\x00\x00\x00\x00\x00\x36\x00\x00\x00\x28\x00\x00\x00\x80\x02\x00\x00\x68\x01\x00\x00\x01\x00\x18\x00’

BMP格式采用小端方式存储数据,文件头的结构按顺序如下:

两个字节:‘BM’表示Windows位图,‘BA’表示OS/2位图;一个4字节整数:表示位图大小;一个4字节整数:保留位,始终为0;一个4字节整数:实际图像的偏移量;一个4字节整数:Header的字节数;一个4字节整数:图像宽度;一个4字节整数:图像高度;一个2字节整数:始终为1;一个2字节整数:颜色数。

所以,组合起来用unpack读取:


 
 
  1. >>> struct.unpack(’ <ccIIIIIIHH’, s)
  2. ( b B ’, b M ’, 691256 , 0 , 54 , 40 , 640 , 360 , 1 , 24 )

结果显示,b’B’b’M’说明是Windows位图,位图大小为640x360,颜色数为24。

请编写一个bmpinfo.py,可以检查任意文件是否是位图文件,如果是,打印出图片大小和颜色数。


 
 
  1. # -- coding: utf-8 --
  2. import base64,struct
  3. bmp_data = base64.b64decode( 'Qk1oAgAAAAAAADYAAAAoAAAAHAAAAAoAAAABABAAAAAAADICAAASCwAAEgsAAAAAAAAAAAAA/3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9/AHwAfAB8AHwAfAB8AHwAfP9//3//fwB8AHwAfAB8/3//f/9/AHwAfAB8AHz/f/9//3//f/9//38AfAB8AHwAfAB8AHwAfAB8AHz/f/9//38AfAB8/3//f/9//3//fwB8AHz/f/9//3//f/9//3//f/9/AHwAfP9//3//f/9/AHwAfP9//3//fwB8AHz/f/9//3//f/9/AHwAfP9//3//f/9//3//f/9//38AfAB8AHwAfAB8AHwAfP9//3//f/9/AHwAfP9//3//f/9//38AfAB8/3//f/9//3//f/9//3//fwB8AHwAfAB8AHwAfAB8/3//f/9//38AfAB8/3//f/9//3//fwB8AHz/f/9//3//f/9//3//f/9/AHwAfP9//3//f/9/AHwAfP9//3//fwB8AHz/f/9/AHz/f/9/AHwAfP9//38AfP9//3//f/9/AHwAfAB8AHwAfAB8AHwAfAB8/3//f/9/AHwAfP9//38AfAB8AHwAfAB8AHwAfAB8/3//f/9//38AfAB8AHwAfAB8AHwAfAB8/3//f/9/AHwAfAB8AHz/fwB8AHwAfAB8AHwAfAB8AHz/f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//3//f/9//38AAA’)
  4. def bmp_info(data):
  5. str = struct.unpack( ’<ccIIIIIIHH’,data[: 30]) #bytes类也有切片方法
  6. if str[ 0] b’B’ and str[1] b’M’:
  7. print( “这是位图文件”)
  8. return {
  9. ‘width’: str[ -4],
  10. ‘height’: str[ -3],
  11. ‘color’: str[ -1]
  12. }
  13. else:
  14. print( “这不是位图文件”)
  15. if name == main:
  16. bmp_info(bmp_data)
  17. print( ‘ok’)


>>> from struct import *
>>> pack(‘hhl’, 1, 2, 3)
b’\x00\x01\x00\x02\x00\x00\x00\x03’
>>> unpack(‘hhl’, b\x00\x01\x00\x02\x00\x00\x00\x03)
(1, 2, 3)
>>> calcsize(‘hhl’)
8

Unpacked fields can be named by assigning them to variables or by wrapping the result in a named tuple:

>>>
>>> record = b’raymond   \x32\x12\x08\x01\x08
>>> name, serialnum, school, gradelevel = unpack(’<10sHHb’, record)

>>> from collections import namedtuple
>>> Student = namedtuple(‘Student’, ‘name serialnum school gradelevel’)
>>> Student._make(unpack(’<10sHHb’, record))
Student(name=b’raymond ‘, serialnum=4658, school=264, gradelevel=8)

The ordering of format characters may have an impact on size since the padding needed to satisfy alignment requirements is different:

>>>
>>> pack(‘ci’, b, 0x12131415)
b’\x00\x00\x00\x12\x13\x14\x15’
>>> pack(‘ic’, 0x12131415, b)
b’\x12\x13\x14\x15’
>>> calcsize(‘ci’)
8
>>> calcsize(‘ic’)
5

The following format ‘llh0l’ specifies two pad bytes at the end, assuming longs are aligned on 4-byte boundaries:

>>>
>>> pack(‘llh0l’, 1, 2, 3)
b’\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00’

示例

     现在我们有了格式字符串,也知道了封装函数,那现在先通过一两个例子看一看。

      例一:比如有一个报文头部在C语言中是这样定义的

      struct header

      {

          unsigned short  usType;

          char[4]               acTag;

          unsigned int      uiVersion;

          unsigned int      uiLength;

      };

      在C语言对将该结构体封装到一块缓存中是很简单的,可以使用memcpy()实现。在Python中,使用struct就需要这样:

              str = struct.pack(‘B4sII’, 0x04, ‘aaaa’, 0x01, 0x0e)

      ‘B4sII’  ------   有一个unsigned short、char[4], 2个unsigned int。其中s之前的数字说明了字符串的大小 。

              type, tag, version, length = struct.unpack(‘B4sll’, str)



class struct.Struct(format)

返回一个struct对象(结构体,参考C)。

该对象可以根据格式化字符串的格式来读写二进制数据。

第一个参数(格式化字符串)可以指定字节的顺序。

默认是根据系统来确定,也提供自定义的方式,只需要在前面加上特定字符即可:

struct.Struct(’>I4sf’)

特定字符对照表附件有。

常见方法和属性:

方法

pack(v1, v2, )
  
  

返回一个字节流对象。

按照fmt(格式化字符串)的格式来打包参数v1,v2,…。

通俗的说就是:

首先将不同类型的数据对象放在一个“组”中(比如元组(1,‘good’,1.22)),

然后打包(“组”转换为字节流对象),最后再解包(将字节流对象转换为“组”)。

pack_into(buffer, offset, v1, v2, …)

根据格式字符串fmt包装值v1,v2,…,并将打包的字节写入从位置偏移开始的可写缓冲buffer。 请注意,offset是必需的参数。

unpack_from(buffer, offset=0)

根据格式字符串fmt,从位置偏移开始从缓冲区解包。 结果是一个元组,即使它只包含一个项目。 缓冲区的大小(以字节为单位,减去偏移量)必须至少为格式所需的大小,如calcsize()所反映的。

属性

format

格式化字符串。

size

结构体的大小。

 

实例:

1.通常的打包和解包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -- coding: utf-8 --
""
打包和解包
”"
import  struct
import binascii
 
values = (1, b ’good’ , 1.22) #查看格式化对照表可知,字符串必须为字节流类型。
s =  struct .Struct( ‘I4sf’ )
packed_data = s.pack(values)
unpacked_data = s.unpack(packed_data)
  
print( ‘Original values:’ , values)
print( ‘Format string :’ , s.format)
print( ‘Uses :’ , s.size,  ‘bytes’ )
print( ‘Packed Value :’ , binascii.hexlify(packed_data))
print( ‘Unpacked Type :’ , type(unpacked_data),  ’ Value:’ , unpacked_data)

 结果:

Original values: (1, b’good’, 1.22)
Format string : b’I4sf’
Uses : 12 bytes
Packed Value : b’01000000676f6f64f6289c3f’
Unpacked Type : <class ‘tuple’> Value: (1, b’good’, 1.2200000286102295)
[Finished in 0.1s]

说明:

首先将数据对象放在了一个元组中,然后创建一个Struct对象,并使用pack()方法打包该元组;最后解包返回该元组。

这里使用到了binascii.hexlify(data)函数。

binascii.hexlify(data)

返回字节流的十六进制字节流。

 

1
2
3
4
5
6
7
>>> a =  ‘hello’
>>> b = a.encode()
>>> b
b ’hello’
>>> c = binascii.hexlify(b)
>>> c
b ’68656c6c6f’

 

 

 

2.使用buffer来进行打包和解包

 使用通常的方式来打包和解包会造成内存的浪费,所以python提供了buffer的方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# -- coding: utf-8 --
""
通过buffer方式打包和解包
”" "
import  struct
import binascii
import ctypes
 
values = (1, b ’good’ , 1.22) #查看格式化字符串可知,字符串必须为字节流类型。
s =  struct .Struct( ‘I4sf’ )
buff = ctypes.create_string_buffer(s.size)
packed_data = s.pack_into(buff,0,values)
unpacked_data = s.unpack_from(buff,0)
  
print( ‘Original values:’ , values)
print( ‘Format string :’ , s.format)
print( ‘buff :’ , buff)
print( ‘Packed Value :’ , binascii.hexlify(buff))
print( ‘Unpacked Type :’ , type(unpacked_data),  ’ Value:’ , unpacked_data)

 结果:

复制代码
Original values1: (1, b’good’, 1.22)
Original values2: (b’hello’, True)
buff : <ctypes.c_char_Array_18 object at 0x000000D5A5617348>
Packed Value : b’01000000676f6f64f6289c3f68656c6c6f01’
Unpacked Type : <class ‘tuple’>  Value: (1, b’good’, 1.2200000286102295)
Unpacked Type : <class ‘tuple’>  Value: (b’hello’, True)
[Finished in 0.1s]
复制代码

说明:

针对buff对象进行打包和解包,避免了内存的浪费。

这里使用到了函数

ctypes.create_string_buffer(init_or_size,size = None)

创建可变字符缓冲区。
返回的对象是c_char的ctypes数组。

init_or_size必须是一个整数,它指定数组的大小,或者用于初始化数组项的字节对象。

3.使用buffer方式来打包多个对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -- coding: utf-8 --
”"
buffer方式打包和解包多个对象
”" "
import  struct
import binascii
import ctypes
 
values1 = (1, b ’good’ , 1.22) #查看格式化字符串可知,字符串必须为字节流类型。
values2 = (b ’hello’ ,True)
s1 =  struct .Struct( ‘I4sf’ )
s2 =  struct .Struct( ‘5s?’ )
buff = ctypes.create_string_buffer(s1.size+s2.size)
packed_data_s1 = s1.pack_into(buff,0,*values1)
packed_data_s2 = s2.pack_into(buff,s1.size,*values2)
unpacked_data_s1 = s1.unpack_from(buff,0)
unpacked_data_s2 = s2.unpack_from(buff,s1.size)
  
print( ‘Original values1:’ , values1)
print( ‘Original values2:’ , values2)
print( ‘buff :’ , buff)
print( ‘Packed Value :’ , binascii.hexlify(buff))
print( ‘Unpacked Type :’ , type(unpacked_data_s1),  ’ Value:’ , unpacked_data_s1)
print( ‘Unpacked Type :’ , type(unpacked_data_s2),  ’ Value:’ , unpacked_data_s2)

 结果:

Original values2: (b’hello’, True)
buff : <ctypes.c_char_Array_18 object at 0x000000D5A5617348>
Packed Value : b’01000000676f6f64f6289c3f68656c6c6f01’
Unpacked Type : <class ‘tuple’> Value: (1, b’good’, 1.2200000286102295)
Unpacked Type : <class ‘tuple’> Value: (b’hello’, True)
[Finished in 0.1s]











0 个人打赏



文章最后发布于: 2018-05-23 18:20:29

        <div class="recommend-box"><div class="recommend-item-box type_blog clearfix" data-report-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/a4729821/article/details/80975747&quot;,&quot;strategy&quot;:&quot;BlogCommendFromBaidu&quot;,&quot;index&quot;:&quot;0&quot;}">
<div class="content" style="width: 962px;">
	<a href="https://blog.csdn.net/a4729821/article/details/80975747" target="_blank" rel="noopener" title="struct用法">
	<h4 class="text-truncate oneline" style="width: 802px;">
			<em>struct</em>用法		</h4>
	<div class="info-box d-flex align-content-center">
		<p class="date-and-readNum oneline">
			<span class="date hover-show">07-09</span>
			<span class="read-num hover-hide">
				阅读数 
				4429</span>
			</p>
		</div>
	</a>
	<p class="content" style="width: 962px;">
		<a href="https://blog.csdn.net/a4729821/article/details/80975747" target="_blank" rel="noopener" title="struct用法">
			<span class="desc oneline">关键字struct能定义各种类型的变量集合,称为结构(structure),并把它们视为一个单元。1.struct的简单例子下面是一个struct的简单的声明例子:structhorse{intage...</span>
		</a>
		<span class="blog_title_box oneline ">
								<span class="type-show type-show-blog type-show-after">博文</span>
										<a target="_blank" rel="noopener" href="https://blog.csdn.net/a4729821">来自:	<span class="blog_title"> 嵌入式萌新_博客</span></a>
											</span>
	</p>
</div>
</div>
<div class="comment-edit-box d-flex">
	<a id="commentsedit"></a>
	<div class="user-img">
		<a href="//me.csdn.net/zhglin666" target="_blank" rel="noopener">
			<img class="" src="https://avatar.csdn.net/8/D/0/3_zhglin666.jpg">
		</a>
	</div>
	<form id="commentform">
		<input type="hidden" id="comment_replyId">
		<textarea class="comment-content" name="comment_content" id="comment_content" placeholder="想对作者说点什么"></textarea>
		<div class="opt-box"> <!-- d-flex -->
			<div id="ubbtools" class="add_code">
				<a href="#insertcode" code="code" target="_self"><i class="icon iconfont icon-daima"></i></a>
			</div>
			<input type="hidden" id="comment_replyId" name="comment_replyId">
			<input type="hidden" id="article_id" name="article_id" value="80421019">
			<input type="hidden" id="comment_userId" name="comment_userId" value="">
			<input type="hidden" id="commentId" name="commentId" value="">
			<div style="display: none;" class="csdn-tracking-statistics tracking-click" data-report-click="{&quot;mod&quot;:&quot;popu_384&quot;,&quot;dest&quot;:&quot;&quot;}"><a href="#" target="_blank" class="comment_area_btn" rel="noopener">发表评论</a></div>
			<div class="dropdown" id="myDrap">
				<a class="dropdown-face d-flex align-items-center" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">
				<div class="txt-selected text-truncate">添加代码片</div>
				<svg class="icon d-block" aria-hidden="true">
					<use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#csdnc-triangledown"></use>
				</svg>
				</a>
				<ul class="dropdown-menu" id="commentCode" aria-labelledby="drop4">
					<li><a data-code="html">HTML/XML</a></li>
					<li><a data-code="objc">objective-c</a></li>
					<li><a data-code="ruby">Ruby</a></li>
					<li><a data-code="php">PHP</a></li>
					<li><a data-code="csharp">C</a></li>
					<li><a data-code="cpp">C++</a></li>
					<li><a data-code="javascript">JavaScript</a></li>
					<li><a data-code="python">Python</a></li>
					<li><a data-code="java">Java</a></li>
					<li><a data-code="css">CSS</a></li>
					<li><a data-code="sql">SQL</a></li>
					<li><a data-code="plain">其它</a></li>
				</ul>
			</div>  
			<div class="right-box">
				<span id="tip_comment" class="tip">还能输入<em>1000</em>个字符</span>
				<input type="button" class="btn btn-sm btn-cancel d-none" value="取消回复">
				<input type="submit" class="btn btn-sm btn-red btn-comment" value="发表评论">
			</div>
		</div>
	</form>
</div>

	<div class="comment-list-container">
	<a id="comments"></a>
	<div class="comment-list-box">
	</div>
	<div id="commentPage" class="pagination-box d-none"></div>
	<div class="opt-box text-center">
		<div class="btn btn-sm btn-link-blue" id="btnMoreComment"></div>
	</div>
</div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_59" data-pid="59"><script type="text/javascript">
(function() {
    var s = "_" + Math.random().toString(36).slice(2);
    document.write('<div style="" id="' + s + '"></div>');
    (window.slotbydup = window.slotbydup || []).push({
        id: "u3491668",
        container:  s
    });
})();

pythonstruct详解 - 编程之路 - CSDN博客

10-13

python学习之struct模块 - 追求卓越 - CSDN博客

8-28

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_60" data-pid="60"><div class="mediav_ad"><newsfeed class="newsfeed QIHOO__WEB__SO__1570929918263_547" id="QIHOO__WEB__SO__1570929918263_547" style="display:block;margin:0;padding:0;border:none;width:900px;height:84px;overflow-y:hidden;overflow-x:hidden;position:relative;text-align:left;"><info-div id="QIHOO__WEB__SO__1570929918263_547-info" style="zoom:1"><info-div class="QIHOO__WEB__SO__1570929918263_547 singleImage clk" data-href="http://www.so.com/s?src=lm&amp;ls=sn2265522&amp;q=%E7%A6%8F%E6%B1%87fxcm%E5%AE%98%E7%BD%91&amp;lmsid=566cce79f9e2afaf.0&amp;lm_extend=ctype%3A22%7Clmbid%3A27%2C16%2C42%2C31%2C66%2C71%2C7%2C91%2C9%2C111%7Cjt%3A2%7Cmaxbid%3A4456453%2C4456713%2C4456961%2C4456963%2C4456457%2C4390928%2C4390947" data-pv="https://stat.lianmeng.360.cn/s2/srp.gif?lm_extend=ctype%3A22%7Clmbid%3A27%2C16%2C42%2C31%2C66%2C71%2C7%2C91%2C9%2C111%7Cjt%3A2%7Cmaxbid%3A4456453%2C4456713%2C4456961%2C4456963%2C4456457%2C4390928%2C4390947&amp;qid=566cce79f9e2afaf.0&amp;nu=4&amp;ls=sn2265522&amp;ifr=0&amp;ir=1&amp;m=BQYGDAwOBwkPCQ4CCg8KD78tnqs5YYM_fzq-3w&amp;ds=1&amp;wp=AAAAAF2ifP8AAAAAAAB1Gz5zpNAYN3RUMW5doA&amp;_r=1570929918987,https://max-l.mediav.com/rtb?type=2&amp;ver=1&amp;v=CH8SEDEzYTZhMTFmOWI3NzE0OGQYsqOKASCisEUoAWIXMzgxNDM1MjU0MjI1NTE3MDEwNTAwMTmIAQA&amp;k=MxCZywAAAAA=&amp;w=AAAAAF2ifP8AAAAAAAB1ZPhjOf9VeXwlYNugRg&amp;i=Bzp4f9l9F9Za&amp;exp=BQBECQFEAQJEAwJECQBEEABDIwBD&amp;z=1" data-clk="https://stat.lianmeng.360.cn/s2/clk.gif?lm_extend=ctype%3A22%7Clmbid%3A27%2C16%2C42%2C31%2C66%2C71%2C7%2C91%2C9%2C111%7Cjt%3A2%7Cmaxbid%3A4456453%2C4456713%2C4456961%2C4456963%2C4456457%2C4390928%2C4390947&amp;qid=566cce79f9e2afaf.0&amp;nu=4&amp;ls=sn2265522&amp;ifr=0&amp;ir=1&amp;m=BQYGDAwOBwkPCQ4CCg8KD78tnqs5YYM_fzq-3w&amp;wp=AAAAAF2ifP8AAAAAAAB1Gz5zpNAYN3RUMW5doA&amp;index=0&amp;txt=%E7%A6%8F%E6%B1%87fxcm%E5%AE%98%E7%BD%91&amp;ds=%%DEAL_SLOT%%&amp;_r=1570929918987,https://max-l.mediav.com/rtb?type=3&amp;ver=1&amp;v=CH8SEDEzYTZhMTFmOWI3NzE0OGQYsqOKASCisEUoAWIXMzgxNDM1MjU0MjI1NTE3MDEwNTAwMTlwAA&amp;k=KOQnVwAAAAA=&amp;i=Bzp4f9l9F9Za&amp;exp=BQBECQFEAQJEAwJECQBEEABDIwBD&amp;x=__OFFSET_X__&amp;y=__OFFSET_Y__&amp;st=__EVENT_TIME_START__&amp;et=__EVENT_TIME_END__&amp;adw=__ADSPACE_W__&amp;adh=__ADSPACE_H__&amp;tc=&amp;turl=">
<info-div class="wrap">
    <info-div class="singleImage-img singleImage-img-left">
        <info-div class="img" style="background-image:url(https://p3.ssl.qhimgs0.com/sdm/360_200_/t01b5bfb208cc34a4e2.png)"><info-div class="ads-tag"></info-div></info-div>
    </info-div>
    <info-div class="singleImage-body singleImage-body-left">
        <info-div class="singleImage-title">外汇保证金开户的话选择fxcm福汇平台怎么样?</info-div>
        <info-div class="singleImage-desc">大观</info-div>
    </info-div>
python struct 详解 - occupy8的专栏 - CSDN博客

10-6

浅析Python中的struct模块 - hong2511的博客 - CSDN博客

7-10

		<div class="recommend-item-box blog-expert-recommend-box" style="display: block;">
		<div class="d-flex">
			<div class="blog-expert-recommend">
				<div class="blog-expert">
					<div class="blog-expert-flexbox" data-report-view="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><a href="https://blog.csdn.net/a4729821" target="_blank"><img src="https://avatar.csdn.net/A/2/5/3_a4729821.jpg" username="a4729821" alt="G_sng" title="G_sng"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="a4729821" data-nick="G_sng">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><a href="https://blog.csdn.net/a4729821" target="_blank"><h5 class="oneline" title="G_sng">G_sng</h5></a></span>  <p></p><p class="article-num" title="23篇文章"> 23篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><a href="https://blog.csdn.net/huqinweI987" target="_blank"><img src="https://avatar.csdn.net/2/5/5/3_huqinwei987.jpg" username="huqinweI987" alt="秦伟H" title="秦伟H"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="huqinweI987" data-nick="秦伟H">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><a href="https://blog.csdn.net/huqinweI987" target="_blank"><h5 class="oneline" title="秦伟H">秦伟H</h5></a></span>  <p></p><p class="article-num" title="181篇文章"> 181篇文章</p><p class="article-num" title="排名:5000+"> 排名:5000+</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><a href="https://blog.csdn.net/a4230787" target="_blank"><img src="https://avatar.csdn.net/F/4/3/3_a4230787.jpg" username="a4230787" alt="a4230787" title="a4230787"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="a4230787" data-nick="a4230787">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><a href="https://blog.csdn.net/a4230787" target="_blank"><h5 class="oneline" title="a4230787">a4230787</h5></a></span>  <p></p><p class="article-num" title="5篇文章"> 5篇文章</p><p class="article-num" title="排名:千里之外"> 排名:千里之外</p><p></p></div></div></div><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><a href="https://blog.csdn.net/hou09tian" target="_blank"><img src="https://avatar.csdn.net/F/A/5/3_hou09tian.jpg" username="hou09tian" alt="棉猴" title="棉猴"></a><span data-report-click="{&quot;mod&quot;:&quot;popu_710&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><span class="blog-expert-button-follow btn-red-follow" data-name="hou09tian" data-nick="棉猴">关注</span></span></div><div class="info"><span data-report-click="{&quot;mod&quot;:&quot;popu_709&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_30638831/article/details/80421019&quot;}"><a href="https://blog.csdn.net/hou09tian" target="_blank"><h5 class="oneline" title="棉猴">棉猴</h5></a></span>  <p></p><p class="article-num" title="287篇文章"> 287篇文章</p><p class="article-num" title="排名:6000+"> 排名:6000+</p><p></p></div></div></div></div>
				</div>
			</div>
		</div>
	</div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/zhongbeida_xue/article/details/79026333&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:&quot;5&quot;}" data-report-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/zhongbeida_xue/article/details/79026333&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:&quot;5&quot;}" data-track-view="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/zhongbeida_xue/article/details/79026333&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:4,&quot;extend1&quot;:&quot;_&quot;}" data-track-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/zhongbeida_xue/article/details/79026333&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:4,&quot;extend1&quot;:&quot;_&quot;}" data-flg="true">                <a href="https://blog.csdn.net/zhongbeida_xue/article/details/79026333" target="_blank">              		<h4 class="text-truncate oneline" style="width: 884px;"><em>Python</em>之<em>struct</em>简介 - Nicholas的专栏 - CSDN博客</h4>                  <div class="info-box d-flex align-content-center">                    <p>                      <span class="date">9-27</span>                    </p>                  </div>                </a>            	</div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_36553623/article/details/78659534&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:&quot;6&quot;}" data-report-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_36553623/article/details/78659534&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:&quot;6&quot;}" data-track-view="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_36553623/article/details/78659534&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:5,&quot;extend1&quot;:&quot;_&quot;}" data-track-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/qq_36553623/article/details/78659534&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:5,&quot;extend1&quot;:&quot;_&quot;}" data-flg="true">                <a href="https://blog.csdn.net/qq_36553623/article/details/78659534" target="_blank">              		<h4 class="text-truncate oneline" style="width: 884px;"><em>python</em>学习之结构体 - twh233的算法blog - CSDN博客</h4>                  <div class="info-box d-flex align-content-center">                    <p>                      <span class="date">9-28</span>                    </p>                  </div>                </a>            	</div>
使用Python模块:struct模块 - 清风阁 - CSDN博客

9-15

python 中的struct 类型 - erinapple的博客 - CSDN博客

9-30

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_61" data-pid="61"><iframe src="https://adaccount.csdn.net/#/preview/261?m=cEEpniEnpJttQQpiLEnLtHbEtcDJyLHpJcJtQpiLtSEAbJbnbimUHXctJbibHDXEJcHQWcEocnnfJfnviiEpnQEtmpJHbcniiiQQ&amp;k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=cEEpniEnpJttQQpiLEnLtHbEtcDJyLHpJcJtQpiLtSEAbJbnbimUHXctJbibHDXEJcHQWcEocnnfJfnviiEpnQEtmpJHbcniiiQQ"></div></div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/mrjiale/article/details/82116065&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:&quot;9&quot;}" data-report-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/mrjiale/article/details/82116065&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:&quot;9&quot;}" data-track-view="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/mrjiale/article/details/82116065&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:8,&quot;extend1&quot;:&quot;_&quot;}" data-track-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/mrjiale/article/details/82116065&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:8,&quot;extend1&quot;:&quot;_&quot;}" data-flg="true">                <a href="https://blog.csdn.net/mrjiale/article/details/82116065" target="_blank">              		<h4 class="text-truncate oneline" style="width: 884px;"><em>python</em> -- <em>struct</em>模块 - 子墨也的博客 - CSDN博客</h4>                  <div class="info-box d-flex align-content-center">                    <p>                      <span class="date">6-16</span>                    </p>                  </div>                </a>            	</div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/shudaqi2010/article/details/78133120&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:&quot;10&quot;}" data-report-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/shudaqi2010/article/details/78133120&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:&quot;10&quot;}" data-track-view="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/shudaqi2010/article/details/78133120&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:9,&quot;extend1&quot;:&quot;_&quot;}" data-track-click="{&quot;mod&quot;:&quot;popu_614&quot;,&quot;dest&quot;:&quot;https://blog.csdn.net/shudaqi2010/article/details/78133120&quot;,&quot;strategy&quot;:&quot;searchFromBaidu1&quot;,&quot;index&quot;:9,&quot;extend1&quot;:&quot;_&quot;}" data-flg="true">                <a href="https://blog.csdn.net/shudaqi2010/article/details/78133120" target="_blank">              		<h4 class="text-truncate oneline" style="width: 884px;"><em>Python</em> <em>struct</em>模块-深入学习 - suchy - CSDN博客</h4>                  <div class="info-box d-flex align-content-center">                    <p>                      <span class="date">6-22</span>                    </p>                  </div>                </a>            	</div>
<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_62" data-pid="62"><iframe src="https://adaccount.csdn.net/#/preview/260?m=AEtEcQQHSEcAiLpnDELnAyJLHcLSQLmcHJAXbJnDnHJDpStXQSpHJiJpLbQiWcJiASXEniLnSSLytvpJnEoAbfbioLpHELEcQSnQ&amp;k=" frameborder="0" width="100%" height="75px" scrolling="no"></iframe><img class="pre-img-lasy" data-src="https://kunyu.csdn.net/1.png?d=2&amp;k=&amp;m=AEtEcQQHSEcAiLpnDELnAyJLHcLSQLmcHJAXbJnDnHJDpStXQSpHJiJpLbQiWcJiASXEniLnSSLytvpJnEoAbfbioLpHELEcQSnQ"></div></div>
c结构体怎么用python
04-14

结构体声明 typedef struct tagIDCardData{ char Name; char Sex; char Nation; char Born; char Address; char 论坛

<div class="recommend-item-box recommend-recommend-box"><div id="kp_box_63" data-pid="63"><script type="text/javascript">
    (function() {
        var s = "_" + Math.random().toString(36).slice(2);
        document.write('<div style="" id="' + s + '"></div>');
        (window.slotbydup = window.slotbydup || []).push({
            id: "u4221910",
            container: s
        });
    })();

<iframe id=“iframeu4221910_0” name=“iframeu4221910_0” src=“https://pos.baidu.com/bcom?conwid=900&conhei=100&rdid=4221910&dc=3&exps=110011,112208&psi=56041e7e961a4bdf76f66861ce5126fb&di=u4221910&dri=0&dis=0&dai=2&ps=14765x602&enu=encoding&dcb=___adblockplus&dtm=HTML_POST&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1570929918175&ti=python%E4%B9%8Bstruct%E8%AF%A6%E8%A7%A3%20-%20%E7%BC%96%E7%A&ari=2&dbv=2&drs=1&pcs=1903x917&pss=1903x14818&cfv=0&cpl=26&chi=1&cce=true&cec=UTF-8&tlm=1570929918&prot=2&rw=917&ltu=https%3A%2F%2Fblog.csdn.net%2Fqq_30638831%2Farticle%2Fdetails%2F80421019&ltr=https%3A%2F%2Fblog.csdn.net%2Fqq_30638831%2Farticle%2Fdetails%2F80421019&ecd=1&uc=1920x1040&pis=-1x-1&sr=1920x1080&tcn=1570929918&qn=a03db8c59b51d70e&tt=1570929917819.487.487.487” width=“900” heig

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值