python中pack函数,python中struct.pack()函數和struct.unpack()函數
python中的struct主要是用來處理C結構數據的,讀入時先轉換為Python的字符串類型,然后再轉換為Python的結構化類型,比如元組(tuple)啥的~。一般輸入的渠道來源於文件或者網絡的二進制流。
1.struct.pack()和struct.unpack()
在轉化過程中,主要用到了一個格式化字符串(format strings),用來規定轉化的方法和格式。
下面來談談主要的方法:
1.1 struct.pack(fmt,v1,v2,.....)
將v1,v2等參數的值進行一層包裝,包裝的方法由fmt指定。被包裝的參數必須嚴格符合fmt。最后返回一個包裝后的字符串。
1.2 struct.unpack(fmt,string)
顧 名思義,解包。比如pack打包,然后就可以用unpack解包了。返回一個由解包數據(string)得到的一個元組(tuple), 即使僅有一個數據也會被解包成元組。其中len(string) 必須等於 calcsize(fmt),這里面涉及到了一個calcsize函數。struct.calcsize(fmt):這個就是用來計算fmt格式所描述的結構的大小。
格式字符串(format string)由一個或多個格式字符(format characters)組成,對於這些格式字符的描述參照Python manual如下
Format
c Type
Python
Note
x
pad byte
no value
c
char
string of length 1
b
signedchar
integer
B
unsignedchar
integer
?
_Bool
bool
(1)
h
short
integer
H
unsignedshort
integer
i
int
integer
I
unsignedint
integer or long
l
long
integer
L
unsignedlong
long
q
longlong
long
(2)
Q
unsignedlonglong
long
(2)
f
float
float
d
double
float
s
char[]
string
p
char[]
string
P
void*
long
2.代碼示例
1 importstruct2
3 #native byteorder
4 buffer = struct.pack("ihb", 1, 2, 3)5 printrepr(buffer)6 print struct.unpack("ihb", buffer)7
8 #data from a sequence, network byteorder
9 data = [1, 2, 3]10 buffer = struct.pack("!ihb", *data)11 printrepr(buffer)12 print struct.unpack("!ihb", buffer)13
14
15
16
17
18 Output:19
20 '\x01\x00\x00\x00\x02\x00\x03'
21 (1, 2, 3)22 '\x00\x00\x00\x01\x00\x02\x03'
23 (1, 2, 3)View Code
首 先將參數1,2,3打包,打包前1,2,3明顯屬於python數據類型中的integer,pack后就變成了C結構的二進制串,轉成 python的string類型來顯示就是 '\x01\x00\x00\x00\x02\x00\x03'。由於本機是小端('little- endian',關於大端和小端的區別請參照這里, 故而高位放在低地址段。i 代表C struct中的int類型,故而本機占4位,1則表示為01000000;h 代表C struct中的short類型,占2位,故表示為0200;同理b 代表C struct中的signed char類型,占1位,故而表示為03。
其他結構的轉換也類似,有些特別的可以參考官方文檔的Manual。
在Format string 的首位,有一個可選字符來決定大端和小端,列表如下:
@
native
native
=
native
standard
<
little-endian
standard
>
big-endian
standard
!
network (= big-endian)
standard
如果沒有附加,默認為@,即使用本機的字符順序(大端or小端),對於C結構的大小和內存中的對齊方式也是與本機相一致的(native),比如有的機器integer為2位而有的機器則為四位;有的機器內存對其位四位對齊,有的則是n位對齊(n未知,我也不知道多少)。
還有一個標准的選項,被描述為:如果使用標准的,則任何類型都無內存對齊。
比如剛才的小程序的后半部分,使用的format string中首位為!,即為大端模式標准對齊方式,故而輸出的為'\x00\x00\x00\x01\x00\x02\x03',其中高位自己就被放在內存的高地址位了。
python中pack函数,python中struct.pack()函數和struct.unpack()函數相关推荐
- scala 函数中嵌套函数_Scala中的嵌套函数 用法和示例
scala 函数中嵌套函数 Scala中的嵌套函数 (Nested functions in Scala) A nested function is defined as a function whi ...
- python中pop函数_Python中的Pop函数
python中pop函数 什么是弹出功能? (What is the pop function?) The method pop() removes and returns the last elem ...
- python调用math函数log_Python中求对数方法总结
Python中Math库和Python库都具备求对数的函数. import numpy as np import math 1. Numpy库 1.1 求以e.2.10为底的对数 函数 功能 np.l ...
- python调用php命令行,python调用php函数 python怎样调用php文件中的函数详解
前言 python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码.函数所需的参数可通过命令行传递. 测试环境 1. ...
- python教程:函数参数中默认值及重要警告
最有用的形式是对一个或多个参数指定一个默认值.这样创建的函数,可以用比定义时允许的更少的参数调用,比如: def ask_ok(prompt, retries=4, reminder='Please ...
- python中itemgetter函数_Python中的sorted函数以及operator.itemgetter函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2,3] >>> b=op ...
- python数字类型转换函数_python中的各种数据类型中的数据格式转换
一,转换list中的数据格式 str --> float (一)使用自定义函数 def str2float(list) strlist=[] for i in list: strlist.app ...
- python实现采样函数_python中resample函数实现重采样和降采样代码
函数原型 resample(self, rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='s ...
- python中mat函数_Python中flatten( )函数及函数用法详解
flatten()函数用法 flatten是numpy.ndarray.flatten的一个函数,即返回一个一维数组. flatten只能适用于numpy对象,即array或者mat,普通的list列 ...
最新文章
- 【Windows】创建任务计划
- Azkaban-two_server模式-安装3和启动运行
- PAT1009 说反话 (20 分)【cinstring类型数组 ctrl z结束 OJ可以用EOF】
- 【类】变量复用,函数复用
- python你是否也走进了这个误区了_Python是不是被严重高估了?
- 在pandas中遍历DataFrame行
- 美术学考计算机,艺术设计专业能跨专业考计算机研究生吗?
- 编程中的移位运算符简单解释
- Kafka刚开启就秒退
- Mac Nginx 配置 Tomcat 配置 jdk环境变量 Nginx部署服务遇到的坑(1)
- python处理mat数据和处理png的区别_Python---利用scipy.misc等库对jpg以及png等图像数据预处理(用于深度学习喂数据)...
- 大数据时代--windows下spark的安装与配置教程
- android触摸滑动监听,Android 滑动监听的实例详解
- asp.net控件开发学习(1)
- ios12安装描述文件失败问题
- html5 retina 1像素,7种方法解决移动端Retina屏幕1px边框问题
- py-01-LINUX
- Android接入支付宝实现支付功能
- 微信小程序服务器该如何选择
- win10关闭防火墙脚本.bat