Skip to main content

sim_lib_net_core/
hex.rs

1//! Lowercase hexadecimal encoding helpers.
2
3/// Encode bytes as lowercase hexadecimal text.
4///
5/// # Examples
6///
7/// ```
8/// use sim_lib_net_core::hex_encode;
9///
10/// assert_eq!(hex_encode(&[0xde, 0xad]), "dead");
11/// ```
12pub fn hex_encode(bytes: &[u8]) -> String {
13    const HEX: &[u8; 16] = b"0123456789abcdef";
14
15    let mut encoded = String::with_capacity(bytes.len() * 2);
16    for &byte in bytes {
17        encoded.push(HEX[(byte >> 4) as usize] as char);
18        encoded.push(HEX[(byte & 0x0f) as usize] as char);
19    }
20    encoded
21}
22
23#[cfg(test)]
24mod tests {
25    use super::hex_encode;
26
27    #[test]
28    fn encodes_lowercase_hex() {
29        assert_eq!(hex_encode(&[]), "");
30        assert_eq!(hex_encode(&[0xde, 0xad]), "dead");
31        assert_eq!(hex_encode(&[0x00, 0x0f, 0x10, 0xff]), "000f10ff");
32    }
33}