注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

Python struct pack使用  

2017-09-24 13:00:53|  分类: Python |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
struct package 里的pack和unpack用于把各种内置数据类型的数据转换成字节流,通常用于网络传输和数据本地化。基本格式是:

pack('<if7s', 1, 2.0, b"mihooke")

输出:

b'\x01\x00\x00\x00\x00\x00\x00@mihooke'

'<if7s'表示将后面参数格式化的形式,<是按小端字节序,1转换成4字节的int类型,2.0转换成4字节的float类型,"mihooke"转换成7字节的char[]类型
其中<符号有以下几种方式
 @ 本地字节序(如果不写,则@是默认值)
 = 本地字节序
 < 小端字节序
 >大端字节序 
 ! 网络字节序(即大端字节序)
   
下面这个例子来说明网络传输的使用

server:


from struct import pack, unpack_from
import socket

if __name__ == "__main__":
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("127.0.0.1", 9527))
s.listen(1)
conn, addr = s.accept()
with conn:
print("connected with ", addr)
recv_data = conn.recv(15)
i = unpack_from('!i', recv_data, 0),
f = unpack_from('!f', recv_data, 4)
string = unpack_from('!7s', recv_data, 8)
print("recv data :", i, f, string)

client:


from struct import pack, unpack
import socket

if __name__ == "__main__":
s = socket.create_connection(("127.0.0.1", 9527), timeout=5)
s.send(pack('!if7s', 1, 2.0, b"mihooke"))

附:
常用数据类型转换
ccharbytes of length 1
bsigned charinteger
Bunsigned charinteger
hshortinteger
Hunsigned shortinteger
iintinteger
Iunsigned intinteger
llonginteger
Lunsigned longinteger
qlong longinteger
Qunsigned long longinteger
ffloatfloat
ddoublefloat
schar[]bytes
  评论这张
 
阅读(7)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018