2个版本
0.1.1 | 2024年3月23日 |
---|---|
0.1.0 | 2024年3月19日 |
#224 in 压缩
用于 neophyte
12KB
168 行
packed-char
允许将一个char
或一个22位整数存储在32位中,与char
大小相同。
工作原理
packed-char
利用char
的有效范围来确定存储的数据类型。这些范围是0..0xD800
和0xDFFF..0x10FFFF
(见char
的文档)。
1101100000000000 // Start
1101111111111111 // End
^^^^^
该范围的前5位是常数。在这里称为代理掩码,它们是u22
值的签名。它们与左边的11位块一起设置
11111111111 00000 11011 11111111111
left chunk | unused | surrogate mask | right chunk
现在有两种情况
- 左边的块为零,且值在代理范围内。
- 左边的块非零,且值超过
char::MAX
。
因此,char
和u22
值被区分开来。