2个版本
0.0.2 | 2021年4月2日 |
---|---|
0.0.1 | 2021年4月1日 |
#314 在 解析工具
31KB
576 行
这个crate提供用于处理字节和十六进制值的宏。
hex!
hex!
是一个宏,它将在编译时将字符串字面量("7D2B"
)转换为字节数组([0x7D, 0x2B]
)或匹配模式。
assert_eq!(hex!("01020304"), [1, 2, 3, 4]);
parse_struct!
parse_struct!
是一个宏,用于从Read
读取器解析字节到结构体(或枚举),具有跳过填充字节的能力。它返回一个Result<Struct, std::io::Error>
值。
use hex_magic::parse_struct;
use std::io::{Read, Result};
#[derive(Debug)]
struct Data {
a: [u8; 2],
b: u32,
}
fn main() -> Result<()> {
let bytes = [
0x48, 0x45, 0x58, 0x00, 0x01, 0x02, 0x00, 0xAA, 0xBB, 0xCC, 0xDD,
];
let data = parse_struct!(bytes.as_ref() => Data {
_: b"HEX",
_: [0],
a: [0x01, _],
_: "00",
b: buf @ "AABB ____" => u32::from_le_bytes(*buf),
})?;
println!("{:X?}", data); // Data { a: [1, 2], b: DDCCBBAA }
Ok(())
}
lib.rs
:
这个crate提供用于处理字节和十六进制值的宏。
hex!
hex!
是一个宏,它将在编译时将字符串字面量("7D2B"
)转换为字节数组([0x7D, 0x2B]
)或匹配模式。
assert_eq!(hex!("01020304"), [1, 2, 3, 4]);
parse_struct!
parse_struct!
是一个宏,用于从Read
读取器解析字节到结构体(或枚举),具有跳过填充字节的能力。它返回一个Result<Struct, std::io::Error>
值。
use hex_magic::parse_struct;
use std::io::{Read, Result};
#[derive(Debug)]
struct Data {
a: [u8; 2],
b: u32,
}
fn main() -> Result<()> {
let bytes = [
0x48, 0x45, 0x58, 0x00, 0x01, 0x02, 0x00, 0xAA, 0xBB, 0xCC, 0xDD,
];
let data = parse_struct!(bytes.as_ref() => Data {
_: b"HEX",
_: [0],
a: [0x01, _],
_: "00",
b: buf @ "AABB ____" => u32::from_le_bytes(*buf),
})?;
println!("{:X?}", data); // Data { a: [1, 2], b: DDCCBBAA }
Ok(())
}
依赖
~1.5MB
~35K SLoC