python struct中pack和unpack

struct.pack() and struct.unpack()

用于C语言数据与Python数据类型间转换。

 

Character Byte order Size Alignment
@nativenativenative
=nativestandardnone
<little-endian 小尾字节序standardnone
>big-endianstandardnone
!network (= big-endian)standardnone

 

Format C Type Python type Standard size Notes
xpad byteno value  
ccharstring of length 11 
bsigned charinteger1(3)
Bunsigned charinteger1(3)
?_Boolbool1(1)
hshortinteger2(3)
Hunsigned shortinteger2(3)
iintinteger4(3)
Iunsigned intinteger4(3)
llonginteger4(3)
Lunsigned longinteger4(3)
qlong longinteger8(2), (3)
Qunsigned long longinteger8(2), (3)
ffloatfloat4(4)
ddoublefloat8(4)
schar[]string  
pchar[]string  
Pvoid *integer (5), (3)

 

 

>>> from struct import *
>>> pack('hhl', 1, 2, 3)    #本例是大尾字节序
'\x00\x01\x00\x02\x00\x00\x00\x03'
>>> unpack('hhl', '\x00\x01\x00\x02\x00\x00\x00\x03')
(1, 2, 3)
>>> calcsize('hhl')    #参数必须是类型fmt
8
>>> pack('ci', '*', 0x12131415)   # 存数时自动对齐字节,传说中的字节对齐,如果加上等号则进行优化,也就是说不填充字节
'*\x00\x00\x00\x12\x13\x14\x15'
>>> pack('ic', 0x12131415, '*')
'\x12\x13\x14\x15*'
>>> calcsize('ci')   如calcsize('=ci')  结果是:5
8
>>> calcsize('ic') 
5
>>>pack('llh0l', 1, 2, 3)        #加0在后面填充两个字节的0,不是很清楚,留待以后操作验明。
'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'
#抄袭一把,(:
 
 
  1. # 取前5个字符,跳过4个字符华,再取3个字符   
  2. format = '5s 4x 3s'  
  3. 2. 使用struck.unpack获取子字符串   
  4. import struct   
  5. print struct.unpack(format, 'Test astring')   
  6. #('Test', 'ing')   
  7. 来个简单的例子吧,有一个字符串'He is not very happy',处理一下,把中间的not去掉,然后再输出。   
  8. import struct   
  9. theString = 'He is not very happy'   
  10. format = '2s 1x 2s 5x 4s 1x 5s'   
  11. print ' '.join(struct.unpack(format, theString))   
  12. 输出结果:   
  13. He is very happy  

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
struct库是Python用于处理二进制数据的模块。它提供了pack和unpack函数来执行二进制数据的打包和解包操作。 pack函数的作用是将Python对象按照指定的格式转换为二进制字符串。它接受两个参数:格式字符串和要打包的数据。格式字符串指定了要打包的数据的类型和顺序,可以使用特定的格式字符来表示不同类型的数据,如整数、浮点数、字符串等。打包后的二进制字符串可以用于存储或传输。例如,使用"i"表示整数类型,使用"f"表示单精度浮点数类型。 unpack函数的作用是将二进制字符串解析为Python对象。它接受两个参数:格式字符串和要解包的二进制字符串。根据格式字符串的指定,unpack函数将二进制数据解析为相应的Python对象,并返回一个元组,其包含解析后的数据。例如,使用"i"表示整数类型,使用"f"表示单精度浮点数类型。 下面是一个示例: ```python import struct # 打包 data = struct.pack("if", 10, 3.14) print(data) # b'\n\x00\x00\x00\x1f\x85\xebQ' # 解包 unpacked_data = struct.unpack("if", data) print(unpacked_data) # (10, 3.140000104904175) ``` 在上面的示例,我们使用格式字符串"if"对整数和浮点数进行打包和解包操作。打包后的二进制字符串为`b'\n\x00\x00\x00\x1f\x85\xebQ'`,解包后得到的元组为`(10, 3.140000104904175)`。 需要注意的是,格式字符串的格式字符和要打包/解包的数据类型要匹配,否则可能会导致数据错误或异常。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值