前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python struct模块_Python struct模块

python struct模块_Python struct模块

作者头像
用户7886150
修改2020-12-22 10:51:11
1.4K0
修改2020-12-22 10:51:11
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: Python中的struct模块

有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体.

?struct模块中最重要的三个函数是pack(), unpack(), calcsize()

?pack(fmt, v1, v2, ...)? ? ?按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)

?unpack(fmt, string)? ? ? ?按照给定的格式(fmt)解析字节流string,返回解析出来的tuple

?calcsize(fmt)? ? ? ? ? ? ? ? ?计算给定的格式(fmt)占用多少字节的内存

?struct中支持的格式如下表:

?FormatC TypePython字节数

?x

?pad byte

?no value

?1

?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

?unsigned int

?integer or long

?4

?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

?1

?p

?char[]

?string

?1

?P

?void *

?long

?注1.q和Q只在机器支持64位操作时有意思

?注2.每个格式前可以有一个数字,表示个数

?注3.s格式表示一定长度的字符串,4s表示长度为4的字符串,但是p表示的是pascal字符串

?注4.P用来转换一个指针,其长度和机器字长相关

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

?CharacterByte orderSize and alignment

?@

?native

?native? ? ? ? ? ? 凑够4个字节

?=

?native

?standard? ? ? ? 按原字节数

?<

?little-endian

?standard? ? ? ? 按原字节数

?>

?big-endian

?standard? ? ? ?按原字节数

?!

?network (= big-endian)

?standard? ? ? ?按原字节数

?1 importstruct2

?3 #定义数据

?4 a = "hello"

?5 b = "world!"

?6 c = 20

?7 d = 42.56

?8

?9 #打包

?10 binStr = struct.pack("5s6sif", a, b, c, d)11 printlen(binStr)12 binStr2 = struct.pack("i", c)13

?14 #解包

?15 e, f, g, h = struct.unpack("5s6sif", binStr)16 printe, f, g, h17

?18 #注意unpack返回的是tuple,如果不按规定格式书写,则返回值将改变类型

?19 i, = struct.unpack("i", c)20 printi21 i = struct.unpack("i", c)22 printi23

?24 #计算转换字节长度

?25 print struct.calcsize("5s6sif")

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com