fast hex
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-06-03 22:32:16 +02:00
afl chore: sync dependencies (monorepo) 2026-03-24 17:22:16 +01:00
benches chore: sync dependencies (monorepo) 2026-03-30 14:56:39 +02:00
fuzz chore: sync dependencies (monorepo) 2026-03-30 14:56:39 +02:00
LICENSE-THIRD-PARTY complement upstream copyright 2021-10-23 14:20:36 +08:00
src chore: sync dependencies (monorepo) 2026-03-30 14:56:39 +02:00
.gitignore chore: specify files to ignore when packaging 2019-03-12 15:51:04 +08:00
Cargo.toml fix(faster-hex): Replace path deps with git refs for serde, criterion, bytes, serde_json 2026-06-03 22:32:16 +02:00
LICENSE Initial commit 2018-10-30 14:47:00 +08:00
README.md Add examples to README.md 2023-06-09 23:20:27 +08:00

faster-hex

License crate-badge

This program implements hex encoding a slice into a predetermined destination using various different instruction sets.

Benchmark

Running

Runs benchmark

cargo bench

Results

Machine: MacBook Pro (Early 2015) (2.7 GHz Intel Core i5)

Rust: rustc 1.31.0 (abe02cefd 2018-12-04)

Compare with hex:

  • Encoding ~10x over
  • Decoding ~10x over

Compare with rustc-hex:

  • Encoding ~2.5x over
  • Decoding ~7x over

Examples

Encode to hex

use faster_hex::hex_string;

let result = hex_string(b"Hello world!");
assert_eq!(result, "48656c6c6f20776f726c6421");

Encode to upper case hex

use faster_hex::hex_string_upper;

let result = hex_string_upper(b"Hello world!");
assert_eq!(result, "48656C6C6F20776F726C6421");

Decode

use faster_hex::hex_decode;

let src = b"48656c6c6f20776f726c6421";
let mut dst = vec![0; src.len() / 2];
hex_decode(src, &mut dst).unwrap();
assert_eq!(dst, b"Hello world!");

Decode with case check

use faster_hex::{hex_decode_with_case, CheckCase};

let src = b"48656c6c6f20776f726c6421";
let mut dst = vec![0; src.len() / 2];

assert!(hex_decode_with_case(src, &mut dst, CheckCase::Lower).is_ok());
assert_eq!(dst, b"Hello world!");

assert!(hex_decode_with_case(src, &mut dst, CheckCase::None).is_ok());
assert_eq!(dst, b"Hello world!");

assert!(hex_decode_with_case(src, &mut dst, CheckCase::Upper).is_err());

Serde feature


use serde::{Deserialize, Serialize};

#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
struct Simple {
  #[serde(with = "faster_hex")]
  foo: Vec<u8>,
  #[serde(with = "faster_hex::nopfx_lowercase")]
  bar: Vec<u8>,
}

Notice

Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.

MINOR version when make incompatible API changes before 1.0.0.

License

This project is licensed under the MIT license.

Third party software

This product includes copies and modifications of software developed by third parties:

See the source code files for more details.

Copies of third party licenses can be found in LICENSE-THIRD-PARTY.