3 stable releases
1.1.1 | Sep 29, 2023 |
---|---|
1.0.0 | May 26, 2023 |
#2119 in Rust patterns
252 downloads per month
Used in 4 crates
(via include_assets_decode)
40KB
853 lines
hexhex 🪄 hexadecimal conversion
Features:
- Display bytes as hex with no (heap) allocations
- Convert bytes to hex
String
- Convert hex
&str
or&[u8]
to a new byte vector - Convert hex
&str
or&[u8]
to bytes in a preallocated buffer - Macro for all your compile-time hex to bytes conversion needs
#![no_std]
support for a subset of the above (if used with no default features)- No runtime panics (except for internal bugs)
Encoding
use hexhex::Hex;
let bytes = [0xc0, 0xff, 0xee];
println!("{}", Hex::new(&bytes)); // no allocations, prints "c0ffee"
use hexhex::{Hex, Case};
let bytes = [0xc0, 0xff, 0xee];
println!("{}", Hex::new(&bytes).with_prefix(true).with_case(Case::Upper)); // no allocations, prints "0xC0FFEE"
Encode to String
Hex
implements the Display
trait, so conversion to string is as easy as:
use hexhex::Hex;
let bytes = [0xc0, 0xff, 0xee];
let hex = Hex::new(&bytes).to_string();
assert_eq!(hex, "c0ffee");
Decoding
Allocating, only with std
:
use hexhex::decode;
assert_eq!(&decode("c0ffee").unwrap(), &[0xc0, 0xff, 0xee]);
Macro
use hexhex::hex_literal;
let bytes: &[u8; 3] = hex_literal!("0xc0ffee");
assert_eq!(bytes, &[0xc0, 0xff, 0xee]);
License
Licensed under the EUPL-1.2-or-later
Contributing
Bug reports are very much appreciated. Feel free to request features, but no promises. I do not intend to accept third-party patches at this time.
Dependencies
~87KB