#hex-string #byte-slice #hex #display #format

no-std hex_fmt

Formatting and shortening byte slices as hexadecimal strings

3 releases (breaking)

0.3.0 Dec 27, 2018
0.2.0 Oct 16, 2018
0.1.0 Oct 11, 2018

#223 in Debugging

Download history 7616/week @ 2023-12-23 12763/week @ 2023-12-30 16554/week @ 2024-01-06 19802/week @ 2024-01-13 18373/week @ 2024-01-20 20211/week @ 2024-01-27 20727/week @ 2024-02-03 19505/week @ 2024-02-10 23996/week @ 2024-02-17 22086/week @ 2024-02-24 24408/week @ 2024-03-02 26879/week @ 2024-03-09 28893/week @ 2024-03-16 28628/week @ 2024-03-23 31443/week @ 2024-03-30 24112/week @ 2024-04-06

117,074 downloads per month
Used in 304 crates (42 directly)

MIT/Apache

11KB
168 lines

Formatting and shortening byte slices as hexadecimal strings

This crate provides wrappers for byte slices and lists of byte slices that implement the standard formatting traits and print the bytes as a hexadecimal string. It respects the alignment, width and precision parameters and applies padding and shortening.

let bytes: &[u8] = &[0x0a, 0x1b, 0x2c, 0x3d, 0x4e, 0x5f];

assert_eq!("0a1b2c3d4e5f", &format!("{}", HexFmt(bytes)));

// By default the full slice is printed. Change the width to apply padding or shortening.
assert_eq!("0a..5f", &format!("{:6}", HexFmt(bytes)));
assert_eq!("0a1b2c3d4e5f", &format!("{:12}", HexFmt(bytes)));
assert_eq!("  0a1b2c3d4e5f  ", &format!("{:16}", HexFmt(bytes)));

// The default alignment is centered. Use `<` or `>` to align left or right.
assert_eq!("0a1b..", &format!("{:<6}", HexFmt(bytes)));
assert_eq!("0a1b2c3d4e5f    ", &format!("{:<16}", HexFmt(bytes)));
assert_eq!("..4e5f", &format!("{:>6}", HexFmt(bytes)));
assert_eq!("    0a1b2c3d4e5f", &format!("{:>16}", HexFmt(bytes)));

// Use e.g. `4.8` to set the minimum width to 4 and the maximum to 8.
assert_eq!(" 12 ", &format!("{:4.8}", HexFmt([0x12])));
assert_eq!("123456", &format!("{:4.8}", HexFmt([0x12, 0x34, 0x56])));
assert_eq!("123..89a", &format!("{:4.8}", HexFmt([0x12, 0x34, 0x56, 0x78, 0x9a])));

// If you prefer uppercase, use `X`.
assert_eq!("0A1B..4E5F", &format!("{:X}", HexFmt(bytes)));

// All of the above can be combined.
assert_eq!("0A1B2C..", &format!("{:<4.8X}", HexFmt(bytes)));

// With `HexList`, the parameters are applied to each entry.
let list = &[[0x0a; 3], [0x1b; 3], [0x2c; 3]];
assert_eq!("[0A.., 1B.., 2C..]", &format!("{:<4X}", HexList(list)));

No runtime deps