简单的开个头,最近在学习Python,想简单的做个笔记,于是便写下了这篇文章
首先呢,说一下在Python中有很多的模块,分为系统自带和外部的,在这里我就简单的介绍一下关于二进制文件
的转换和存储,那么今天要用到的包就是 "struct",首先介绍一下这个“struct”里面两个比较有用的东西,一个是
"struct.pack("i",a)",这个是把一个十进制的数字,转换成二进制,其中的参数我在后面交代。另一个比较有用的
就是"struct.unpack("i",bytesInt)",不用说就知道,这个就是把二进制转成十进制,那么在下面我就用Python代码具
体的介绍一下这两个的函数的用法以及一些其他的小知识
1.struct.pack
import struct #导入struct模块
a,b,c=12,10,5
bytesInt=struct.pack("iii",a,b,c) #其中i是int类型的意思,几个整数,对应几个i
print(bytesInt) #打印出后(一个int,占四个字节)=》
b'\x0c\x00\x00\x00\n\x00\x00\x00\x05\x00\x00\x00'
file=open("bytesFile.txt","wb") #输入一个二进制文本,bytesFile.txt是文本的名字,
wb是二进制文本写入,rb是二进制文本读入
file.write(bytesInt) #把bytesInt 写入bytesFile.txt里面
file.close() #关闭文件
#好了,以上就是"struct.pack"的简单应用了。其他的类型我想大家都会举一反三的。
2.struct.unpack
import struct
file=open("bytesFile.txt","rb") #我在这里打开一个二进制的文本,
我就把上面的bytesInt放进bytesFile.txt里面
datas=file.read(4) #我在这里读file,因为int占四个字节,所以read(4),
data=struct.unpack("i",datas)[0] #里面参数与上面一样,不过多解释了,其中字节其实
也可以看成一个列表,所以我取第一个字节[0]
print(data) #打印出后 =》12
file.close() #每一次打开文件,记得关闭哦
3.bytes,encode , decode
s="世界"
l=s.encode("utf-8") #以utf-8的格式对s进行utf-8编码
print(l) # 打印出后 =》 b'\xe4\xb8\x96\xe7\x95\x8c'
print(l.decode("utf-8")) #打印出后 解码 =》世界
print(bytes(s,"utf-8")) #打印出后 把str转成字节格式,效果同encode=》
b'\xe4\xb8\x96\xe7\x95\x8c'
4.pack的第一个属性值(转自官方:https://docs.python.org/3/library/struct.html)
Format | C Type | Python type | Standard size | Notes |
---|---|---|---|---|
x | pad byte | no value | ||
c | char | bytes of length 1 | 1 | |
b | signed char | integer | 1 | (1),(3) |
B | unsigned char | integer | 1 | (3) |
? | _Bool | bool | 1 | (1) |
h | short | integer | 2 | (3) |
H | unsigned short | integer | 2 | (3) |
i | int | integer | 4 | (3) |
I | unsigned int | integer | 4 | (3) |
l | long | integer | 4 | (3) |
L | unsigned long | integer | 4 | (3) |
q | long long | integer | 8 | (2), (3) |
Q | unsigned long long | integer | 8 | (2), (3) |
n | ssize_t | integer | (4) | |
N | size_t | integer | (4) | |
e | (7) | float | 2 | (5) |
f | float | float | 4 | (5) |
d | double | float | 8 | (5) |
s | char[] | bytes | ||
p | char[] | bytes | ||
P | void * | integer | (6) |
ok,今天就到这了,后面还有更新哦(若有错误,请指正,谢谢哦):)