美文网首页
python对bytes字节流的处理 struct模块 快速上手

python对bytes字节流的处理 struct模块 快速上手

作者: 生活就是爱 | 来源:发表于2020-06-07 10:17 被阅读0次

最近使用struct模块二进制字节流进行读取操作,网上挺多教程都写的挺好的,不过对新手不是很友好
找到有一份笔记可以快速上手,不过格式不大友好,我自己跑了一遍,过程展示出来,向原作者致敬

使用bin_buf = struct.pack(fmt, buf)将buf为二进制数组bin_buf
使用buf = struct.unpack(fmt, bin_buf)将bin_buf二进制数组反转换回buf

1. 整型数 -> 二进制流

buf1 = 256
bin_buf1 = struct.pack('i', buf1) # 'i'代表'integer'    
ret1 = struct.unpack('i', bin_buf1)
print(bin_buf1, '  <====>  ', ret1)

结果如下:

b'\x00\x01\x00\x00'   <====>   (256,)

2. 浮点数 -> 二进制流

buf2 = 3.1415
bin_buf2 = struct.pack('d', buf2) # 'd'代表'double'    
ret2 = struct.unpack('d', bin_buf2)
print(bin_buf2, '  <====>  ', ret2)

结果如下:

b'o\x12\x83\xc0\xca!\t@'   <====>   (3.1415,)

3. 字符串 -> 二进制流

buf3 = 'Hello World'
bin_buf3 = struct.pack('11s', buf3) # '11s'代表长度为11的'string'字符数组    
ret3 = struct.unpack('11s', bin_buf3)
print(bin_buf3, '  <====>  ', ret3)

结果如下:

b'Hello World'   <====>   (b'Hello World',)

4. 结构体 -> 二进制流

# 假设有一个结构体    
# struct header {    
#   int buf1;    
#   double buf2;    
#   char buf3[11];    
# }    
bin_buf_all = struct.pack('id11s', buf1, buf2, buf3)
ret_all = struct.unpack('id11s', bin_buf_all)
print(bin_buf_all,'  <====>  ', ret_all)

结果如下:

b'\x00\x01\x00\x00\x00\x00\x00\x00o\x12\x83\xc0\xca!\t@Hello World'   <====>   (256, 3.1415, b'Hello World')

参考资料:
Python中对字节流/二进制流的操作:struct模块简易使用教程

相关文章

  • python对bytes字节流的处理 struct模块 快速上手

    最近使用struct模块二进制字节流进行读取操作,网上挺多教程都写的挺好的,不过对新手不是很友好找到有一份笔记可以...

  • python 字节流 按长度截取

    一、业务需求 谈到python对bytes类型数据的处理,常用的struct模块,网上资料甚多,这里不做赘述用st...

  • Day15内建模块struct&hashlib&

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

  • 常用内建模块2

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

  • struct

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

  • 51. struct

    Python提供了一个struct模块来解决bytes和其他二进制数据类型的转换。struct的pack函数把任意...

  • python处理二进制数据

    struct 处理二进制数据离不开python的struct模块,struct理解上你可以把它理解为c语言的结构体...

  • requests模块

    编写requests模块是因为Python的urllib模块用起来太复杂。 使用举例 快速上手requests,参...

  • Python 模块 快速上手

    模块简介 python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免...

  • struct模块

    该模块在Python值和表示为Python bytes对象的C结缓冲区构体之间进行转换。可用于处理存储在文件中或者...

网友评论

      本文标题:python对bytes字节流的处理 struct模块 快速上手

      本文链接:https://www.haomeiwen.com/subject/fuggzhtx.html