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