如何将十六进制字符串转换为 u8 切片?

2024-03-08

我有一个看起来像这样的字符串"090A0B0C"我想将其转换为看起来像这样的切片[9, 10, 11, 12]。我最好怎样做呢?

我不想将单个十六进制字符元组转换为单个整数值。我想将由多个十六进制字符元组组成的字符串转换为多个整数值的切片。


如果您想避免对十六进制的依赖,您还可以自己实现十六进制编码和解码hex crate:

use std::{fmt::Write, num::ParseIntError};

pub fn decode_hex(s: &str) -> Result<Vec<u8>, ParseIntError> {
    (0..s.len())
        .step_by(2)
        .map(|i| u8::from_str_radix(&s[i..i + 2], 16))
        .collect()
}

pub fn encode_hex(bytes: &[u8]) -> String {
    let mut s = String::with_capacity(bytes.len() * 2);
    for &b in bytes {
        write!(&mut s, "{:02x}", b).unwrap();
    }
    s
}

请注意,decode_hex()如果字符串长度为奇数,函数会发生混乱。我做了一个可以在操场上使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将十六进制字符串转换为 u8 切片? 的相关文章

随机推荐