#bencode #contrib #codec #library #binary-encoding

torrust-tracker-contrib-bencode

(contrib) 高效的bencode编码和解码

4个版本

3.0.0-alpha.112023年9月18日
3.0.0-alpha.102023年9月16日
3.0.0-alpha.82023年9月15日

#1781 in 编码


用于torrust-tracker

Apache-2.0

63KB
1.5K SLoC

Bencode

此库允许创建和解析bencode编码。

Bencode是BitTorrent技术中使用的二进制编码,从元信息文件到DHT消息。Bencode类型包括整数、字节数组、列表和字典,其中后两种可以包含任何bencode类型(它们可以递归构建)。


lib.rs:

用于解析和转换bencoded数据的库。

示例

解码bencoded数据

    extern crate bencode;

    use std::default::Default;
    use bencode::{BencodeRef, BRefAccess, BDecodeOpt};

    fn main() {
        let data = b"d12:lucky_numberi7ee"; // cspell:disable-line
        let bencode = BencodeRef::decode(data, BDecodeOpt::default()).unwrap();

        assert_eq!(7, bencode.dict().unwrap().lookup("lucky_number".as_bytes())
            .unwrap().int().unwrap());
    }

编码bencoded数据

    #[macro_use]
    extern crate bencode;

    fn main() {
        let message = (ben_map!{
            "lucky_number" => ben_int!(7),
            "lucky_string" => ben_bytes!("7")
        }).encode();

        let data = b"d12:lucky_numberi7e12:lucky_string1:7e"; // cspell:disable-line
        assert_eq!(&data[..], &message[..]);
    }

依赖

~2.5–3.5MB
~74K SLoC