This crate provides macros for working with bytes and hexadecimal values.
hex!
hex!
is a macro which converts string literals ("7D2B"
) to byte arrays ([0x7D, 0x2B]
) or match patterns at compile time.
assert_eq!(hex!("01020304"), [1, 2, 3, 4]);
parse_struct!
parse_struct!
is a macro for parsing bytes from Read
readers
into structs (or enums), with the ability to skip padding bytes.
It returns a Result<Struct, std::io::Error>
value.
``` use hexmagic::parsestruct; use std::io::{Read, Result};
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 = parsestruct!(bytes.asref() => Data { : b"HEX", _: [0], a: [0x01, _], _: "00", b: buf @ "AABB __" => u32::fromle_bytes(*buf), })?; println!("{:X?}", data); // Data { a: [1, 2], b: DDCCBBAA } Ok(()) } ```