文本和二进制混合存储

难以避免的,文本会和二进制数据混合在一个文件里,本文讨论多种方案中的一种。以前的博客已经讨论过了,有两套方案:基于文本插入二进制数据;或是基于二进制插入文本。在这里,选前者讨论一下。例如:

以文本开始,\(shift in)len  data\(shift out),结束。

新的转义字符

反斜线加小括号,这是对传统转义字符的扩展。把\n写成\(new line),语义更加明确。例子中的shift in和shift out,是ASCII码里的两个字符。

len使用UTF-8.inf格式

这种格式是对UTF-8的修改,它分为A、B两种模式:

A模式:0*******
B模式:1*******

单独一个A模式,占用1字节,和ASCII码兼容;
AB模式,占用2字节,表达14比特数据;
AAB,3字节,21比特;
……
AAAAAAAAB,9字节,63比特。
在这里,不用它表示字符,而是长度len。

data部分

这部分为len个字节的二进制数。
需要联合len和后边的shift out判断终止。

期待编辑器支持上述格式

在传统的编辑器里,上述内容会显示乱码。所以,期待编辑器能够支持这种文本和二进制混合存储的方案。例如,把二进制部分显示成一个emoji符号,若选择这个符号,还能显示二进制形式的。

举例

2022年的旅游照片=\(shift in) len data \(shift out)

data部分是一张照片,长度为6.87MB,对应地,len=6.87M=6M 890K 901 Byte。用UTF-8.inf格式表示为:
110.1101111010.1110000101
共23比特,使用4字节模式
00000011.00110111.01010111.10000101
0x03 37 57 85

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 `tell()` 函数可以获取当前文件指针的位置,即文件中的偏移量。通过使用 `tell()` 函数,你可以确定在何处写入文本和数字混合的数据。 以下是一个示例,展示了如何使用 `tell()` 函数在二进制文件中获取当前文件指针的位置: ```python text_data = "Hello, World!" number = 12345 with open('binary_file.bin', 'wb') as file: # 写入文本数据 file.write(text_data.encode()) # 获取当前文件指针位置 position = file.tell() print("当前文件指针位置:", position) # 将数字转换为字节数据并写入 byte_data = number.to_bytes(4, 'big') file.write(byte_data) ``` 在这个例子中,我们首先定义了一个文本数据 `text_data` 和一个整数 `number`。 然后,我们使用 `open()` 函数以二进制写入模式 `'wb'` 打开文件,并使用 `write()` 方法将文本数据写入文件。由于文本数据是字符串形式,我们需要使用 `encode()` 方法将其转换为字节数据。 接下来,我们使用 `tell()` 函数获取当前文件指针的位置,并将其存储在变量 `position` 中。这样我们就可以知道在哪里写入其他数据。 最后,我们将整数 `number` 转换为字节数据,并使用 `write()` 方法将其写入文件。 同时,我们打印出当前文件指针的位置。 这样,你就可以使用 `tell()` 函数在二进制文件中获取当前文件指针的位置,从而确定在何处写入文本和数字混合的数据。根据需要,你可以在不同的位置写入不同类型的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值