python3 pickle & struct

import pickle

pickle是用来把python原生的对象存在硬盘里

>>> print(D)
{'cisco': 1, 'python': 2, 'ericsson': 3}
>>> import pickle
>>> F=open('pickle_test.pkl', 'wb')
>>> pickle.dump(D,F)
>>> F.close()
>>> F=open('pickle_test.pkl','rb')
>>> E=pickle.load(F)
>>> E
{'cisco': 1, 'python': 2, 'ericsson': 3}
>>> 

  用pickle.dump()把字典D这个python对象存储进pickle_test.pkl,该pkl文件是存在硬盘上的

后面用pickle.load()再把硬盘上的文件打开

 pickle这种方式,只能用来存储python的对象,C语言的对象看不了,可以用XML或者JSON来存储数据,其他语言也是可以看的

####################################################

struck可以用来构造tcp头部

参考博客:

https://www.cnblogs.com/gala/archive/2011/09/22/2184801.html

>: 网络字节序:左侧是高位,右侧是低位

<: 主机字节序:左侧是低位,右侧是高位

i: 整数,占4个字节,目的是把7放在4个字节里,即序列号要是7 - i对应的是7

s: 字符,4s即四个字母,一个字母占一个字节 - 对应的是b'spam'

h: 整数,两个字节,对应的是8,网络编程里可能对应的是端口号

b'spam': 二进制的spam

写入了一共10个字节:4+4+2

>>> F=open('data.bin','wb')
>>> import struct
>>> data=struct.pack('>i4sh',7,b'spam',8)
>>> data
b'\x00\x00\x00\x07spam\x00\x08'
>>> F.write(data)
10
>>> F.close()
>>> F=open('data.bin','rb')
>>> data=F.read()
>>> data
b'\x00\x00\x00\x07spam\x00\x08'
>>> values = struct.unpack('>i4sh',data)
>>> values
(7, b'spam', 8)
>>> 

  这种方法比较原始,比较麻烦,有其他更高级的方法来构造TCP数据包

 

posted @ 2019-07-12 10:03  月亮上的石头  阅读(737)  评论(0编辑  收藏  举报