python struct,pickle,socket.ntohs, ntohl, htons,htonl

pickle序列化
	pickle 腌制
	pickle.load(file)
	pickle.dump(file)
	pickle.dumps(str)
	pickle.loads(str)
	-----------------
	import pickle
	#dumps(obj) 将对象序列化
	lista=["one","tow","three"]
	listb = pickle.dumps(lista)
	#print listb
	
	#loads(str) 将原对象恢复,数据类型也恢复原来的
	listc = pickle.loads(listb)
	#print listc
	
	#-------
	
	#dump(obj,file) 将对象存储到文件里序列化
	str = ("str1","str2","str3")
	fl=file('1.file','wb') #文件名1.file write模式
	pickle.dump(str,fl,True)
	fl.close()
	
	#load(obj,file) 将dump()存储在文件的数据恢复
	f2=file('1.file','rb')
	t=pickle.load(f2)
	#print t
	f2.close()
	

struct 字节流,组包拆包实现
	http://blog.sina.com.cn/s/blog_4b5039210100f1tu.html
	http://www.cnblogs.com/gala/archive/2011/09/22/2184801.html
	struct.pack()
	struct.unpack()
	>>> import struct
	>>> a=20
	>>> b=400
	>>> str=struct.pack('ii',a,b)    #转换成字节流,虽然还是字符串,但是可以在网络上传输
	>>> print len(str)               #ii 表示两个int
	8                                #可以看到长度为8个字节,正好是两个int型数据的长度
	>>> a1,a2=struct.unpack('ii',str)
	>>> print ("a1:%d , b2:%d"%(a1,b1)) #a1:20,b2:400
	
	
	>>> a='abc'
    >>> print(a)
    >>> bytes=struct.pack('3s',a)
    >>> a,=struct.unpack('3s',bytes)
    >>> print(a)

	
	format = "!HH%ds" % len(data)
	buffer = struct.pack(format,opcode,blocknumber,data)
	我们要对一个数据进行打包,加上一些个包头,我们根据下面的格式符信息,知道H是unsigned short是2个字节,而s是char型。所以这个buffer就是2个字节的opcode,2个字节的blocknumber,和len长的char。
Socket程序中的ntohs, ntohl, htons,htonl	
	socket.ntohs=net  to host short int 16位
	socket.htons=host to net  short int 16位
	socket.ntohl =net to host long  int 32位
	socket.htonl=host to net  long  int 32位


struct中支持的格式如下表:

Format C Type Python 字节数
x pad byte no value 1
c char string of length 1 1
b signed char integer 1
B unsigned char integer 1
? _Bool bool 1
h short integer 2
H unsigned short integer 2
i int integer 4
I unsigned int integer or long 4
l long integer 4
L unsigned long long 4
q long long long 8
Q unsigned long long long 8
f float float 4
d double float 8
s char[] string 1
p char[] string 1
P void * long

注1.q和Q只在机器支持64位操作时有意思


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值