# [base16](https://crates.io/crates/base16) (hex) encoding for Rust. [![Docs](https://docs.rs/base16/badge.svg)](https://docs.rs/base16) [![CircleCI](https://circleci.com/gh/thomcc/rust-base16.svg?style=svg)](https://circleci.com/gh/thomcc/rust-base16) [![codecov](https://codecov.io/gh/thomcc/rust-base16/branch/master/graph/badge.svg)](https://codecov.io/gh/thomcc/rust-base16) 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. ## Usage Add `base16 = "0.2"` to Cargo.toml, then: ```rust 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](https://docs.rs/base16). ## `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`](https://doc.rust-lang.org/alloc/index.html) 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`](https://doc.rust-lang.org/alloc/index.html) crate is acceptable), then you require this as `alloc`-only as follows: ```toml [dependencies] # 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. ```toml [dependencies] # Turn of use of `std` and `alloc`. base16 = { version = "0.2", default-features = false } ``` Both of these configurations are `no_std` compatible. # License Public domain, as explained [here](https://creativecommons.org/publicdomain/zero/1.0/legalcode)