- 按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送;
- 按照指定格式将字节流转换为Python指定的数据类型;
- 处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二进制(字节流)写,读的方式来处理文件;
- 处理c语言中的结构体;
struct模块中的函数
函数 | return | explain |
---|---|---|
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根据本地机器字节顺序转换.可以用格式中的第一个字符来改变对齐方式.定义如下
Character | Byte order | Size | Alignment |
---|---|---|---|
@(默认) | 本机 | 本机 | 本机,凑够4字节 |
= | 本机 | 标准 | none,按原字节数 |
< | 小端 | 标准 | none,按原字节数 |
> | 大端 | 标准 | none,按原字节数 |
! | network(大端) | 标准 | none,按原字节数 |
如果不懂大小端,见大小端参考网址.
格式符
格式符 | C语言类型 | Python类型 | Standard size |
---|---|---|---|
x | pad byte(填充字节) | no value | |
c | char | string of length 1 | 1 |
b | signed char | integer | 1 |
B | unsigned char | integer | 1 |
? | _Bool | bool | 1 |
h | short | integer | 2 |
H | unsigned short | integer | 2 |
i | int | integer | 4 |
I(大写的i) | unsigned int | integer | 4 |
l(小写的L) | long | integer | 4 |
L | unsigned long | long | 4 |
q | long long | long | 8 |
Q | unsigned long long | long | 8 |
f | float | float | 4 |
d | double | float | 8 |
s | char[] | string | |
p | char[] | string | |
P | void * | long |
注- -!
- _Bool在C99中定义,如果没有这个类型,则将这个类型视为char,一个字节;
- q和Q只适用于64位机器;
- 每个格式前可以有一个数字,表示这个类型的个数,如s格式表示一定长度的字符串,4s表示长度为4的字符串;4i表示四个int;
- P用来转换一个指针,其长度和计算机相关;
- 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
,你得配合位运算符这么写:
-
>>> n =
10240099
-
>>> b1 = (n &
0xff000000) >>
24
-
>>> b2 = (n &
0xff0000) >>
16
-
>>> b3 = (n &
0xff00) >>
8
-
>>> b4 = n &
0xff
-
>>> bs = bytes([b1, b2, b3, b4])
-
>>> bs
-
b’\x00\x9c@c’
非常麻烦。如果换成浮点数就无能为力了。
好在Python提供了一个struct
模块来解决bytes
和其他二进制数据类型的转换。
struct
的pack
函数把任意数据类型变成bytes
:
-
>>>
import struct
-
>>> struct.pack(
’>I’,
10240099)
-
b’\x00\x9c@c’
pack
的第一个参数是处理指令,’>I’
的意思是:
>
表示字节顺序是big-endian,也就是网络序,I
表示4字节无符号整数。
后面的参数个数要和处理指令一致。
struct
准确地讲,Python没有专门处理字节的数据类型。但由于b’str’
可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。
在Python中,比方说要把一个32位无符号整数变成字节,也就是4个长度的bytes
,你得配合位运算符这么写:
-
>>> n =
10240099
-
>>> b1 = (n &
0xff000000) >>
24
-
>>> b2 = (n &
0xff0000) >>
16
-
>>> b3 = (n &
0xff00) >>
8
-
>>> b4 = n &
0xff
-
>>> bs = bytes([b1, b2, b3, b4])
-
>>> bs
-
b’\x00\x9c@c’
非常麻烦。如果换成浮点数就无能为力了。
好在Python提供了一个struct
模块来解决bytes
和其他二进制数据类型的转换。
struct
的pack
函数把任意数据类型变成bytes
:
-
>>>
import struct
-
>>> struct.pack(
’>I’,
10240099)
-
b’\x00\x9c@c’
pack
的第一个参数是处理指令,’>I’
的意思是:
>
表示字节顺序是big-endian,也就是网络序,I
表示4字节无符号整数。
后面的参数个数要和处理指令一致。
unpack
把bytes
变成相应的数据类型:
-
>>> struct.unpack(
’>IH’,
b’\xf0\xf0\xf0\xf0\x80\x80’)
-
(
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
读取:
-
>>> struct.unpack(’
<ccIIIIIIHH’, s)
-
(
b
’
B
’,
b
’
M
’,
691256
,
0
,
54
,
40
,
640
,
360
,
1
,
24
)
-
结果显示,b’B’
、b’M’
说明是Windows位图,位图大小为640x360,颜色数为24。
请编写一个bmpinfo.py
,可以检查任意文件是否是位图文件,如果是,打印出图片大小和颜色数。
-
# -- coding: utf-8 --
-
-
import base64,struct
-
-
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’)
-
-
-
def bmp_info(data):
-
-
str = struct.unpack(
’<ccIIIIIIHH’,data[:
30])
#bytes类也有切片方法
-
-
-
if str[
0]
b’B’ and str[1]
b’M’:
-
-
print(
“这是位图文件”)
-
-
return {
-
‘width’: str[
-4],
-
‘height’: str[
-3],
-
‘color’: str[
-1]
-
}
-
-
else:
-
-
print(
“这不是位图文件”)
-
-
-
if
name ==
‘main’:
-
bmp_info(bmp_data)
-
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]
文章最后发布于: 2018-05-23 18:20:29
<div class="recommend-box"><div class="recommend-item-box type_blog clearfix" data-report-click="{"mod":"popu_614","dest":"https://blog.csdn.net/a4729821/article/details/80975747","strategy":"BlogCommendFromBaidu","index":"0"}">
<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>
C语言结构体(struct)常见使用方法
04-14 阅读数 48万+
注意:盗版是不会得到修正和更新的!今天复习一下struct,顺便挖掘一下以前没注意的小细节:基本定义:结构体,通俗讲就像是打包封装,把一些有共同特征(比如同属于某一类事物的属性,往往是某种业务相关属性... 博文 来自: huqinwei的专栏
python3中的struct模块使用
05-13 阅读数 2746
软硬件环境python3struct简介struct是python(包括版本2和3)中的内建模块,它用来在c语言中的结构体与python中的字符串之间进行转换,数据一般来自文件或者网络。常用方法str... 博文 来自: a4230787的博客
C++中struct简介2-1
08-11 阅读数 9134
1 struct概述C++的内置简单数据类型,如int、float等只能存储一种类型的数据。但现实世界更为复杂,几乎任何我们能够想到的物理对象,即使是进行最低限度的描述,也都需要好几项数据才行。可以使... 博文 来自: hou09tian的博客
<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
});
})();
python 数据结构(Data Structure)
04-04 阅读数 1487
importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt一、DataStructure1.List列表是Python自带的数据结构,是一个... 博文 来自: Nicole的博客
Python之struct简介
01-10 阅读数 4344
一、struct简介 看到struct这么英文单词,大家应该并不陌生,因为c/c++中就有struct,在那里struct叫做结构体。在Python中也使用struct,这充分说明了这个s... 博文 来自: Nicholas的专栏
(Python3) struct
04-17 阅读数 341
功能:字节数组与二进制数据的相互转换,常用以下两个功能官方:https://docs.python.org/2/library/struct.html#struct.error功能一:打包struct... 博文 来自: 科学技术是第一生产力
python struct模块--字节流转化
12-28 阅读数 184
简介pythonstrtuct模块主要在Python中的值于C语言结构之间的转换。可用于处理存储在文件或网络连接(或其它来源)中的二进制数据。主要函数函数名返回类型描述pack(fmt,v1,v2…)... 博文 来自: F-God的博客
[golang]struct {}
06-26 阅读数 414
有c/c++学习经历的会发现go的struct语法和c/c++很类型,但是golang的struct{}很有意思。做set,map[string]struct{}由于struct{}是空,不关心内容,... 博文 来自: boshuzhang的专栏
<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&ls=sn2265522&q=%E7%A6%8F%E6%B1%87fxcm%E5%AE%98%E7%BD%91&lmsid=566cce79f9e2afaf.0&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&qid=566cce79f9e2afaf.0&nu=4&ls=sn2265522&ifr=0&ir=1&m=BQYGDAwOBwkPCQ4CCg8KD78tnqs5YYM_fzq-3w&ds=1&wp=AAAAAF2ifP8AAAAAAAB1Gz5zpNAYN3RUMW5doA&_r=1570929918987,https://max-l.mediav.com/rtb?type=2&ver=1&v=CH8SEDEzYTZhMTFmOWI3NzE0OGQYsqOKASCisEUoAWIXMzgxNDM1MjU0MjI1NTE3MDEwNTAwMTmIAQA&k=MxCZywAAAAA=&w=AAAAAF2ifP8AAAAAAAB1ZPhjOf9VeXwlYNugRg&i=Bzp4f9l9F9Za&exp=BQBECQFEAQJEAwJECQBEEABDIwBD&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&qid=566cce79f9e2afaf.0&nu=4&ls=sn2265522&ifr=0&ir=1&m=BQYGDAwOBwkPCQ4CCg8KD78tnqs5YYM_fzq-3w&wp=AAAAAF2ifP8AAAAAAAB1Gz5zpNAYN3RUMW5doA&index=0&txt=%E7%A6%8F%E6%B1%87fxcm%E5%AE%98%E7%BD%91&ds=%%DEAL_SLOT%%&_r=1570929918987,https://max-l.mediav.com/rtb?type=3&ver=1&v=CH8SEDEzYTZhMTFmOWI3NzE0OGQYsqOKASCisEUoAWIXMzgxNDM1MjU0MjI1NTE3MDEwNTAwMTlwAA&k=KOQnVwAAAAA=&i=Bzp4f9l9F9Za&exp=BQBECQFEAQJEAwJECQBEEABDIwBD&x=__OFFSET_X__&y=__OFFSET_Y__&st=__EVENT_TIME_START__&et=__EVENT_TIME_END__&adw=__ADSPACE_W__&adh=__ADSPACE_H__&tc=&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(字节流,组包拆包实现) bytes得转换
08-10 阅读数 2718
我们知道python只定义了6种数据类型,字符串,整数,浮点数,列表,元组,字典。但是C语言中有些字节型的变量,在python中该如何实现呢?这点颇为重要,特别是要在网络上进行数据传输的话。pytho... 博文 来自: PHP/Python学习
<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="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><div class="blog-expert-item"><div class="blog-expert-info-box"><div class="blog-expert-img-box" data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_710","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_710","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_710","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_710","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><span class="blog-expert-button-follow btn-red-follow" data-name="hou09tian" data-nick="棉猴">关注</span></span></div><div class="info"><span data-report-click="{"mod":"popu_709","dest":"https://blog.csdn.net/qq_30638831/article/details/80421019"}"><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="{"mod":"popu_614","dest":"https://blog.csdn.net/zhongbeida_xue/article/details/79026333","strategy":"searchFromBaidu1","index":"5"}" data-report-click="{"mod":"popu_614","dest":"https://blog.csdn.net/zhongbeida_xue/article/details/79026333","strategy":"searchFromBaidu1","index":"5"}" data-track-view="{"mod":"popu_614","dest":"https://blog.csdn.net/zhongbeida_xue/article/details/79026333","strategy":"searchFromBaidu1","index":4,"extend1":"_"}" data-track-click="{"mod":"popu_614","dest":"https://blog.csdn.net/zhongbeida_xue/article/details/79026333","strategy":"searchFromBaidu1","index":4,"extend1":"_"}" 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="{"mod":"popu_614","dest":"https://blog.csdn.net/qq_36553623/article/details/78659534","strategy":"searchFromBaidu1","index":"6"}" data-report-click="{"mod":"popu_614","dest":"https://blog.csdn.net/qq_36553623/article/details/78659534","strategy":"searchFromBaidu1","index":"6"}" data-track-view="{"mod":"popu_614","dest":"https://blog.csdn.net/qq_36553623/article/details/78659534","strategy":"searchFromBaidu1","index":5,"extend1":"_"}" data-track-click="{"mod":"popu_614","dest":"https://blog.csdn.net/qq_36553623/article/details/78659534","strategy":"searchFromBaidu1","index":5,"extend1":"_"}" 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 数字 结构体 例程
07-08 阅读数 48
pythonstruct数字结构体例程#!/usr/bin/python#-*-coding:utf-8-*-importsysimportstructdefsimple_test():trans_i... 博文 来自: abc
C 结构体 struct 详解
12-05 阅读数 2万+
数组(Array),它是一组具有相同类型的数据的集合。但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄为整数,所在的学习小组为字符,成绩为... 博文 来自: zhanghow的博客
<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&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&k=&m=cEEpniEnpJttQQpiLEnLtHbEtcDJyLHpJcJtQpiLtSEAbJbnbimUHXctJbibHDXEJcHQWcEocnnfJfnviiEpnQEtmpJHbcniiiQQ"></div></div><div class="recommend-item-box baiduSearch recommend-box-ident" data-report-view="{"mod":"popu_614","dest":"https://blog.csdn.net/mrjiale/article/details/82116065","strategy":"searchFromBaidu1","index":"9"}" data-report-click="{"mod":"popu_614","dest":"https://blog.csdn.net/mrjiale/article/details/82116065","strategy":"searchFromBaidu1","index":"9"}" data-track-view="{"mod":"popu_614","dest":"https://blog.csdn.net/mrjiale/article/details/82116065","strategy":"searchFromBaidu1","index":8,"extend1":"_"}" data-track-click="{"mod":"popu_614","dest":"https://blog.csdn.net/mrjiale/article/details/82116065","strategy":"searchFromBaidu1","index":8,"extend1":"_"}" 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="{"mod":"popu_614","dest":"https://blog.csdn.net/shudaqi2010/article/details/78133120","strategy":"searchFromBaidu1","index":"10"}" data-report-click="{"mod":"popu_614","dest":"https://blog.csdn.net/shudaqi2010/article/details/78133120","strategy":"searchFromBaidu1","index":"10"}" data-track-view="{"mod":"popu_614","dest":"https://blog.csdn.net/shudaqi2010/article/details/78133120","strategy":"searchFromBaidu1","index":9,"extend1":"_"}" data-track-click="{"mod":"popu_614","dest":"https://blog.csdn.net/shudaqi2010/article/details/78133120","strategy":"searchFromBaidu1","index":9,"extend1":"_"}" 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>
使用Python模块:struct模块
05-06 阅读数 3118
Python没有提供直接的将用户定义的数据类型和文件IO关联起来的功能,但是它提供了struct库(是一个内置库)——我们可以以二进制模式来写这些数据(有趣的是,它真的是设计来讲文本数据写为缓存的)概... 博文 来自: 清风阁
浅析task_struct结构体
09-27 阅读数 809
task_struct结构体是Linux下的进程控制块PCB,PCB里包含着一个进程的所有信息。要了解task_struct结构体,就必须要知道什么是进程。进程可以有以下几个定义: 一个正在执行的程序... 博文 来自: 你又来看我了,一起学习吧
python3 struct模块 处理二进制 pack unpack用法
09-05 阅读数 159
python有时需要处理二进制数据,例如存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用struct来处理c语言中的结构体.struct模块中最重要的三个函数... 博文 来自: whatday的专栏
python -- struct模块
08-27 阅读数 435
struct模块中基本的pack和unpack函数:pack(fmt,v1,v2…)返回string按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回.unpack(fmt,v1... 博文 来自: 子墨也的博客
<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&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&k=&m=AEtEcQQHSEcAiLpnDELnAyJLHcLSQLmcHJAXbJnDnHJDpStXQSpHJiJpLbQiWcJiASXEniLnSSLytvpJnEoAbfbioLpHELEcQSnQ"></div></div>
python 中的struct 类型
08-15 阅读数 500
准确地讲,Python没有专门处理字节的数据类型。但由于str既是字符串,又可以表示字节,所以,字节数组=str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,... 博文 来自: erinapple的博客
Python中struct.pack()和struct.unpack()用法详细说明
05-21 阅读数 3万+
python中的struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~。一般输入的渠道来源于文件或者网络的二... 博文 来自: 把握自己。
c结构体怎么用python写
结构体声明 typedef struct tagIDCardData{ char Name; char Sex; char Nation; char Born; char Address; char 论坛
python中struct.pack中的fmt理解(笔记)
08-24 阅读数 2342
python官方的文档struct.pack(fmt,v1,v2,…)Returnastringcontainingthevaluesv1,v2,…packedaccordingtothegivenf... 博文 来自: DaxiaLeeSuper的博客
结构体定义:struct与typedef struct 用法详解和用法小结
10-16 阅读数 5万+
一、typedef的用法在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程的一部分,但它并不实际分配内存空间,实例像:typedefintINT;typedefin... 博文 来自: haiou0的专栏
<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
});
})();