20 个版本

使用旧的 Rust 2015

0.9.0 2024 年 2 月 2 日
0.8.0 2023 年 8 月 17 日
0.7.1 2022 年 5 月 13 日
0.7.0 2020 年 8 月 6 日
0.1.1 2016 年 7 月 30 日

#443解析器实现

Download history 1855/week @ 2024-04-23 2830/week @ 2024-04-30 1858/week @ 2024-05-07 1995/week @ 2024-05-14 3140/week @ 2024-05-21 2578/week @ 2024-05-28 2516/week @ 2024-06-04 2095/week @ 2024-06-11 2659/week @ 2024-06-18 1194/week @ 2024-06-25 1425/week @ 2024-07-02 3192/week @ 2024-07-09 2594/week @ 2024-07-16 2137/week @ 2024-07-23 1865/week @ 2024-07-30 1939/week @ 2024-08-06

8,854 每月下载量

MIT/Apache

22KB
477

tlv-parser

Build Status Latest Version Docs

BER-TLV 解析库

库支持从 &[u8] 解析并发射 Vec<u8>

如果可以使用 core::alloc,这是一个 no_std 包。

有关使用方法,请参阅 decode-tlv/src/main.rs

$ echo "7003820151" | cargo run
     Running `target/debug/decode-tlv`
	 tag=70
	   tag=82,     len=1,    data=51 Q

lib.rs:

用于解析和发射 BER-TLV 数据的库。

#示例

解析 TLV

use tlv_parser::tlv::{Tlv, Value};

let input: Vec<u8> = vec![0x21, 0x05, 0x22, 0x03, 0x03, 0x01, 0xaa];
let tlv = Tlv::from_vec( &input ).unwrap();

if let Some(&Value::Val(ref val)) = tlv.find_val("21 / 22 / 03") {
    assert_eq!(*val, vec![0xaa]);
}

发射构造的 TLV 封装的基本 TLV

use tlv_parser::tlv::*;

let primitive_tlv = Tlv::new(0x01, Value::Nothing).unwrap();
let constructed_tlv = Tlv::new(0x21, Value::TlvList(vec![primitive_tlv])).unwrap();

assert_eq!(constructed_tlv.to_vec(), vec![0x21, 0x02, 0x01, 0x00]);

依赖项

~1.5MB
~38K SLoC