struct

用处

  • 按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送;
  • 按照指定格式将字节流转换为Python指定的数据类型;
  • 处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二进制(字节流)写,读的方式来处理文件;
  • 处理c语言中的结构体;

struct模块中的主要函数

struct.pack(fmt,v1,v2,.....):按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回

struct.unpack(fmt,string):按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果(tuple)

import struct
a=struct.pack("ihb", 1, 2, 3)
print(a)   #b'\x01\x00\x00\x00\x02\x00\x03'
print(struct.unpack("ihb",a))  #(1, 2, 3)

-------------------------------------------------------
import struct
s1 = struct.Struct('I4sf')
values1 = (1, b'good', 1.22)
a=s1.pack(*values1)
print(a)   #b'\x01\x00\x00\x00good\xf6(\x9c?'
print(s1.unpack(a))   #(1, b'good', 1.2200000286102295)

pack_into(fmt,buffer,offset,v1,v2…):按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中

pack_from(fmt,buffer,offset):按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果(tuple)

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 values: (1, b'good', 1.22)
Format string : b'I4sf'
buff : <ctypes.c_char_Array_12 object at 0x000001CC5AC319C8>
Packed Value : b'01000000676f6f64f6289c3f'
Unpacked Type : <class 'tuple'>  Value: (1, b'good', 1.2200000286102295)
'''

对齐方式

CharacterByte orderSizeAlignment
@(默认)本机本机本机,凑够4字节
=本机标准none,按原字节数
<小端标准none,按原字节数
>大端标准none,按原字节数
!network(大端)标准none,按原字节数

如果不懂大小端,见大小端参考网址.

格式符

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值