#memory #char #memory-size

packed-char

在32位中存储一个字符或一个22位整数

2个版本

0.1.1 2024年3月23日
0.1.0 2024年3月19日

#224 in 压缩


用于 neophyte

MIT 许可证

12KB
168

docs.rs Crates.io Version GitHub License

packed-char

允许将一个char或一个22位整数存储在32位中,与char大小相同。

工作原理

packed-char利用char的有效范围来确定存储的数据类型。这些范围是0..0xD8000xDFFF..0x10FFFF(见char的文档)。

1101100000000000 // Start
1101111111111111 // End
^^^^^

该范围的前5位是常数。在这里称为代理掩码,它们是u22值的签名。它们与左边的11位块一起设置

11111111111  00000    11011            11111111111
left chunk | unused | surrogate mask | right chunk

现在有两种情况

  • 左边的块为零,且值在代理范围内。
  • 左边的块非零,且值超过char::MAX

因此,charu22值被区分开来。

无运行时依赖