#codec #hex #decode #encode #no-std

no-std base16

base16 (hex) encoding and decoding

5 releases

0.2.1 Jul 8, 2019
0.2.0 Jul 7, 2019
0.1.2 Apr 11, 2019
0.1.1 May 2, 2018
0.1.0 May 2, 2018

#1010 in Encoding

Download history 13727/week @ 2024-01-13 17180/week @ 2024-01-20 17906/week @ 2024-01-27 19607/week @ 2024-02-03 19782/week @ 2024-02-10 19303/week @ 2024-02-17 26202/week @ 2024-02-24 18534/week @ 2024-03-02 18235/week @ 2024-03-09 15823/week @ 2024-03-16 16965/week @ 2024-03-23 14616/week @ 2024-03-30 15662/week @ 2024-04-06 18516/week @ 2024-04-13 19795/week @ 2024-04-20 14034/week @ 2024-04-27

70,393 downloads per month
Used in 128 crates (48 directly)

CC0 license

300 lines

base16 (hex) encoding for Rust.

Docs CircleCI codecov

This is a base16 (e.g. hexadecimal) encoding and decoding library which was initially written with an emphasis on performance.

This was before Rust added SIMD, and I haven't gotten around to adding that. It's still probably the fastest non-SIMD impl.


Add base16 = "0.2" to Cargo.toml, then:

fn main() {
    let original_msg = "Foobar";
    let hex_string = base16::encode_lower(original_msg);
    assert_eq!(hex_string, "466f6f626172");
    let decoded = base16::decode(&hex_string).unwrap();
    assert_eq!(String::from_utf8(decoded).unwrap(), original_msg);

More usage examples in the docs.

no_std Usage

This crate supports use in no_std configurations using the following knobs.

  • The "alloc" feature, which is on by default, adds a number of helpful functions that require use of the alloc crate, but not the rest of std. This is no_std compatible.
    • Each function documents if it requires use of the alloc feature.
  • The "std" feature, which is on by default, enables the "alloc" feature, and additionally makes base16::DecodeError implement the std::error::Error trait. (Frustratingly, this trait is in std and not in core or alloc...)

For clarity, this means that by default, we assume you are okay with use of std.

If you'd like to disable the use of std, but are in an environment where you have an allocator (e.g. use of the alloc crate is acceptable), then you require this as alloc-only as follows:

# Turn of use of `std` (but leave use of `alloc`).
base16 = { version = "0.2", default-features = false, features = ["alloc"] }

If you just want the core base16 functionality and none of the helpers, then you should turn off all features.

# Turn of use of `std` and `alloc`.
base16 = { version = "0.2", default-features = false }

Both of these configurations are no_std compatible.


Public domain, as explained here

No runtime deps