整数与二进制之间的转换
整数转换为二进制
函数to_bytes
介绍:
def to_bytes(length, byteorder, signed)
"""
length:单位:字节;表示二进制的长度,不足的补零
byteorder:表示整数的字节顺序,即是大端法还是小端法。big:最高有效位位于开头;little:最高有效位位于末尾
signed:是否用补码的形式表示整数,默认false;
return:
"""
a, b, c, d = 1024, -1024
'''
a 的二进制 bin(a) = 100 0000 0000
a 的16进制 hex(a) = 0x400
'''
a_bin_b = a.to_bytes(10, byteorder="big") # b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
a_bin_l = a.to_bytes(10, byteorder="little") # b'\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00'
b_bin = b.to_bytes(10, byteorder="big", signed=True) # b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
二进制转换为整数
函数from_bytes
介绍:
def from_bytes(bytes, byteorder, signed)
"""
bytes:二进制数
byteorder, signed:同上,转换格式需和to_bytes一致
return: 返回对应整数
"""
# 续
a = int.from_bytes(a_bin_b, byteorder="big") # 1024
a = int.from_bytes(a_bin_l, byteorder="little") # 1024
b = int.from_bytes(b_bin, byteorder="big", signed=True) # -1024
读写bin文件
二进制文件,其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件,只是表明它是binary格式。比如虚拟光驱文件常用".bin"作为后缀,但并不意味着所有的bin文件都是虚拟光驱文件。一般来讲是机器代码,汇编语言编译后的结果(磁盘操作系统下汇编语言编译后与".com"文件相类似)
只写bin文件
pwd = os.path.abspath(".") # 当前工作路径
file_path = pwd + r"setting.bin"
fname = open(file_path, "wb") # 二进制只写的方式打开文件,并覆盖原有文件
fname.write(self.threshold_1.to_bytes(10, byteorder="big"))
fname.write(self.threshold_2.to_bytes(10, byteorder="big"))
fname.write(self.channel_sum_1.to_bytes(10, byteorder="big"))
fname.write(self.channel_sum_2.to_bytes(10, byteorder="big"))
fname.write(self.averge_num.to_bytes(10, byteorder="big"))
只读bin文件
pwd = os.path.abspath(".")
file_path = pwd + r"setting.bin"
fname = open(file_path, "rb") # 二进制只读
size = os.path.getsize(file_path) # 获取文件大小
# 使用read函数时,读取的大小要和to_bytes.length相同
self.threshold_1 = int.from_bytes(fname.read(10), byteorder="big")
self.threshold_2 = int.from_bytes(fname.read(10), byteorder="big")
self.channel_sum_1 = int.from_bytes(fname.read(10), byteorder="big")
self.channel_sum_2 = int.from_bytes(fname.read(10), byteorder="big")
self.averge_num = int.from_bytes(fname.read(10), byteorder="big")
# 如果不需要初始化,仅读取:
for i in range(0, size, 10):
print(int.from_bytes(fname.read(10), byteorder="big"))
打开文件的模式
模式 | 描述 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |