在下这厢有礼了
0. 软件准备
python 版本 Python 3.7.1
大概花费时间:3天半抽空学习的知识分享
bin文件查看器: 提取码:f4uj
生bin的工具我就不提供了,你自己找找吧!
1. 基础知识掌握
bin文件: open函数创建file对象
打开文件的不同模式:例子:open(“file.txt”,‘r’)
| 模式 | 描述 |
|---|---|
r
| 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb
| 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+
| 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+
| 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w
| 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb
| 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+
| 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+
| 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a
| 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab
| 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+
| 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+
| 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
t
| 文本默认 |
x
| 写模式,新建一个文件,如果该文件存在,则会报错。 |
b
| 二进制模式 |
+
| 打开一个文件进行更新(可读可写)。 |
bin文件的python struct库 读写属性
a = struct.pack('B',0x00)
b = struct.unpack(‘B’,a)
这块可以使用python编译的看一下哦!(你就明白了)
1. struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,
可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:struct.pack(fmt, v1, v2, ...),
参数fmt是格式字符串,关于格式字符串的相关信息在下面有所介绍。v1, v2, ...表示要转换的python值。
2. struct.unpack做的工作刚好与struct.pack相反,用于将字节流转换成python数据类型。它的
函数原型为:struct.unpack(fmt, string),该函数返回一个元组
| 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 |
这快就类似于C语言中的字节对齐,大小端的选择
例子:(后面有说明)
a = struct.pack('<I',0x12345678) #四字节存入,按小端存储
b = struct.pack('>I',0x12345678) #四字节存入,按大端存储
| Character | Byte order | Size and alignment |
|---|---|---|
@
| native | native 凑够4个字节 |
=
| native | standard 按原字节数 |
<
| little-endian | standard 按原字节数 |
>
| big-endian | standard 按原字节数 |
!
| network (= big-endian) | standard 按原字节数 |
2. bin文件的打开和模式
file=open(file_name,'wb')#二进制写模式file=open(file_name,'rb')#二进制读模式file=open(file_name,'ab')#二进制补充读写模式3. bin文件读取
import struct
import os
defReadFile():
filepath='7.bin'
binfile =open(filepath,'rb')#打开二进制文件
size = os.path.getsize(filepath)#获得文件大小for i inrange(size):
data = binfile.read(1)#每次输出一个字节print(data)
binfile.close()if __name__ =='__main__':
ReadFile()
7.bin文件如下
4. bin文件写入
import struct
import os
defWriteFile():
filepath='7.bin'
data =123
binfile =open(filepath,'ab+')#打开二进制文件(追加完成)
a = struct.pack('B',data)
binfile.write(a)
binfile.close()if __name__ =='__main__':
WriteFile()
7.bin文件
5. bin文件的大小端写入
import struct
file_name ="5.bin"defBig_little_endian():file=open(file_name,'wb')
a = struct.pack('I',0x12345678)#四字节存入,正常状态
b = struct.pack('<I',0x12345678)#四字节存入,按小端存储
c = struct.pack('>I',0x12345678)#四字节存入,按大端存储file.write(a)file.write(b)file.write(c)file.close()if __name__ =='__main__':
Big_little_endian()效果图
6. bin文件的写0
import struct
bin_file_1 ="1.bin"defwrite0x00():file=open(bin_file_1,'wb')for i inrange(1,0xFF):
data = struct.pack('B',0x00)#写0file.write(data)file.close
if __name__ =='__main__':
write0x00()效果图:
7. bin文件的写1
import struct
bin_file_2 ="2.bin"defwrite0xFF():file=open(bin_file_2,'wb')for i inrange(0,0xFF):
data = struct.pack('B',0xFF)#写1file.write(data)file.close
if __name__ =='__main__':
write0x00()
效果图:
8. bin文件的合并
1.bin和2.bin合并成merage.bin
import struct
bin_file_1 ="1.bin"
bin_file_2 ="2.bin"
bin_file_merage ="merage.bin"defmerage_bin():
file_merage =open(bin_file_merage,'wb')
file_1 =open(bin_file_1,'rb')
data = file_1.read()
file_merage.write(data)
file_2 =open(bin_file_2,'rb')
data = file_2.read()
file_merage.write(data)
file_1.close()
file_2.close()
file_merage.close()if __name__ =='__main__':
merage_bin()
效果图:
9. bin文件写入字符串
import struct
import string
bin_file_1 ="7.bin"
enter =memoryview(b"STARTX")#返回值是元组defwriteString():file=open(bin_file_1,'wb')for i in enter:
data = struct.pack('B',i)file.write(data)file.close
if __name__ =='__main__':
writeString()效果图:
学习:
- python手册


发布评论