• 售前

  • 售后

热门帖子
入门百科

详解python的二进制转化模块

[复制链接]
安夕萌mdj 显示全部楼层 发表于 2022-1-8 06:24:04 |阅读模式 打印 上一主题 下一主题
在pyton中,通过
  1. struct
复制代码
模块来对二进制举行转换,主要包括两大类函数,即用于打包的pack和用于解包的unpack。
此中,
  1. struct.pack
复制代码
的输入格式为
  1. struct.pack(format, v1, v2, ...)
复制代码
,此中
  1. format
复制代码
为格式字符串,
  1. v1,v2..
复制代码
为将要转成
  1. bytes
复制代码
的字符。
例如
  1. >>> import struct
  2. >>> struct.pack('i', 15)
  3. b'\x0f\x00\x00\x00'
  4. >>> struct.pack('iii', 15, 16, 17)
  5. b'\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00'
  6. >>> struct.pack('b', 255)   #b格式的取值范围是-128到127
  7. struct.error: byte format requires -128 <= number <= 127
  8. >>> struct.pack('B', 200)
  9. b'\xc8'
  10. >>> struct.pack('B', 71)    #128以内可用ASCII表示
  11. b'G'
复制代码
  1. i
复制代码
代表
  1. int
复制代码
,15对应的二进制代码为
  1. F000
复制代码
,故其输出为
  1. b\x0f\x00\x00\x00
复制代码
。当格式字符串为
  1. iii
复制代码
时,分析要将三个数字以整数类型转化为二进制。
此中,格式化字符串中的每个字符都代表一种数据类型,此中整型相关的字符如下,左侧为带符号整型,右侧为无符号整型
C语言类型 C语言类型尺度巨细
  1. b
复制代码
signed char
  1. B
复制代码
unsigned char1
  1. h
复制代码
short
  1. H
复制代码
unsigned short2
  1. i
复制代码
int
  1. I
复制代码
unsigned int4
  1. l
复制代码
long
  1. L
复制代码
unsigned long4
  1. q
复制代码
long long
  1. Q
复制代码
unsigned long long8
  1. n
复制代码
ssize_t
  1. N
复制代码
size_t 其他类型
格式C 类型Python 类型尺度巨细
  1. x
复制代码
填充字节无
  1. c
复制代码
char长度为1的字节串
  1. ?
复制代码
_Boolbool1
  1. e
复制代码
float2
  1. f
复制代码
floatfloat4
  1. d
复制代码
doublefloat8
  1. s
复制代码
char[]字节串
  1. p
复制代码
char[]字节串
  1. P
复制代码
void*整数
  1. struct
复制代码
中提供了获取尺度巨细的函数,
  1. calcsize
复制代码
:
  1. >>> struct.calcsize('B')
  2. 1
  3. >>> struct.calcsize('i')
  4. 4
复制代码
除了声明被格式化时的数据类型,
  1. struct
复制代码
还可以指定对齐方式,例如
  1. >>> struct.pack("i",15)
  2. b'\x0f\x00\x00\x00'
  3. >>> struct.pack(">i",15)    #小端序
  4. b'\x00\x00\x00\x0f'
  5. >>> struct.pack("<i",15)    #大端序
  6. b'\x0f\x00\x00\x00'
复制代码
其对应字符的含义分别为
  1. @
复制代码
  1. =
复制代码
  1. <
复制代码
  1. >
复制代码
  1. !
复制代码
本机本机小端大端网络(大端)此中默认为
  1. @
复制代码
,即本机字节次序。
在认识了
  1. pack
复制代码
之后,与之对偶的
  1. unpack
复制代码
也就没啥难度了
  1. >>> test = struct.pack("III",125,1255,12555)>>> struct.unpack("III",test)(125, 1255, 12555)
复制代码
除了
  1. pack
复制代码
  1. unpack
复制代码
  1. struct
复制代码
模块还提供了C语言风格的一对函数
  1. pack_into
复制代码
  1. unpack_from
复制代码
,二者的声明分别为
  1. struct.pack_into(format, buffer, offset, v1, v2, ...)
  2. struct.unpack_from(format, /, buffer, offset=0)
复制代码
此中
  1. buffer
复制代码
表示缓冲流,在
  1. pack_into
复制代码
中,将
  1. v1,v2...
复制代码
  1. offset
复制代码
的偏置打包入
  1. buffer
复制代码
中;在
  1. unpack_from
复制代码
中,将
  1. buffer
复制代码
中的数据从
  1. offset
复制代码
处依次取出。
  1. struct
复制代码
中封装了用于二进制处置处罚的类
  1. Struct
复制代码
,按照以往经验,其
  1. pack
复制代码
函数的实现方法很有可能是下面这种
  1. def pack(format,*args):
  2.     return Struct(format).pack(args)
复制代码
此中
  1. Struct
复制代码
的初始化方法就是输入一个格式化字符串,例如
  1. >>> s = struct.Struct("III")>>> s.pack(1,2,3)b'\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00'
复制代码
总结

本篇文章就到这里了,盼望能够给你带来资助,也盼望您能够多多关注草根技能分享的更多内容!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作