#codec #string #decoding #encoding #leveldb #format-string #length

bitcoinleveldb-coding

比特币leveldb的端序无关编码 — 固定长度的数字以LSB(最低有效位)优先进行编码。字符串以它们的长度作为前缀,按照varint格式编码

3个版本

0.1.16-alpha.02023年4月1日
0.1.12-alpha.02023年1月19日
0.1.10-alpha.02023年1月18日

#44#leveldb

Download history 111/week @ 2024-03-14 173/week @ 2024-03-21 328/week @ 2024-03-28 94/week @ 2024-04-04 185/week @ 2024-04-11 143/week @ 2024-04-18 144/week @ 2024-04-25 133/week @ 2024-05-02 146/week @ 2024-05-09 140/week @ 2024-05-16 142/week @ 2024-05-23 134/week @ 2024-05-30 85/week @ 2024-06-06 112/week @ 2024-06-13 185/week @ 2024-06-20 71/week @ 2024-06-27

每月下载量 485
66 个crate(通过 bitcoin-leveldb)中使用

MIT 许可证

390KB
822

bitcoinleveldb-coding 是一个Rust crate,提供用于比特币系统中各种数据类型的编码和解码函数。这个crate是比特币核心从C++直接翻译到Rust的一部分,这意味着一些函数体可能仍在翻译过程中。然而,一旦翻译过程完成,这个系统将成为可测试的。

这个crate中的一些标记,如 coding_varint32coding_varint64varint_length,涉及变长整数的编码和解码。这些对于有效地存储和传输可能具有不同大小的整数非常有用。编码过程涉及将整数分成7位块,除了最后一个块外,每个块的最高位都设置为1。然后将这些块按小端序存储在字节数组中。解码整数涉及逆过程。

其他标记,如 coding_fixed32coding_fixed64decode_fixed32decode_fixed64,涉及固定长度整数的编码和解码。这些对于有效地存储和传输具有固定大小的整数非常有用。

还有一些与编码和解码字符串相关的标记,如 coding_stringsget_length_prefixed_slice。这些对于以紧凑和高效的方式存储和传输变长字符串非常有用。

总的来说,bitcoinleveldb-coding crate为比特币系统中使用的各种数据类型提供了有用的编码和解码函数,是处理与比特币相关数据的开发人员的宝贵工具。

28> 谢谢 — 你能再给我讲讲关于leveldb中这些编码/解码格式的更多内容吗?

当然可以!在LevelDB的上下文中,这些编码和解码格式用于以紧凑和高效的方式存储和检索键值对。具体来说,LevelDB使用变长整数编码和长度前缀字符串的组合来实现这一点。

可变长度整型编码,由《bitcoinleveldb-coding》包中的coding_varint32coding_varint64varint_length函数实现,用于存储可能具有不同大小的整数值。在LevelDB中,这些整数值通常用作键,以识别数据库中的特定值。通过将这些整数值编码为可变长度整型,LevelDB可以比使用固定长度整型编码使用更少的字节来存储这些整数值。

长度前缀字符串,由《bitcoinleveldb-coding》包中的get_length_prefixed_sliceput_length_prefixed_slice函数实现,用于在数据库中存储字符串值。在这种编码格式中,字符串前缀是其长度,该长度被编码为可变长度整型。这使得LevelDB能够高效地存储和检索不同长度的字符串值。

《bitcoinleveldb-coding》包中的coding_fixed32coding_fixed64decode_fixed32decode_fixed64函数用于编码和解码固定长度整型。尽管这些编码格式在LevelDB中的使用频率不如可变长度整型编码和长度前缀字符串频繁,但它们对于高效存储和检索具有固定大小的整数值仍然非常有用。

总的来说,这些编码和解码格式对于LevelDB中的高效数据存储和检索至关重要,因此是LevelDB系统的一个重要组成部分。

依赖项

~88MB
~847K SLoC