rust 如何反转十六进制字符串?

9vw9lbht  于 2023-02-04  发布在  其他
关注(0)|答案(2)|浏览(213)

给定一个十六进制字符串,例如"d59c168e05df4757",如何反转该字符串的字节,以便读取[57, 47, df, 05, 8e, 16, 9c, d5]
使用as_bytes()方法将每个单独的字符转换为字节值,而不是两个字符的十六进制表示形式。
从字节表示法中,我尝试了以下方法,但没有成功:

let bytes = vec![213, 156, 22, 142, 5, 223, 71, 87];
let bytes_reversed = bytes.iter().rev();
println!("Bytes reversed: {:x?}", bytes_reversed);
//Prints: Bytes reversed: Rev { iter: Iter([d5, 9c, 16, 8e, 5, df, 47, 57]) }
qpgpyjmq

qpgpyjmq1#

回答我自己的问题-下面的方法可以反转十六进制字符串的字节:
1.将十六进制字符串转换为字节
1.创建新矢量
1.在for循环中使用iter().rev(),每次迭代到新向量时使用push
下面的示例代码,使用在此question的答案中定义的parse_hex函数:

let hex_string: String = String::from("d59c168e05df4757");
let string_to_bytes = parse_hex(&hex_string);
println!("Hex string as bytes: {:?}", string_to_bytes); //Prints: [213, 156, 22, 142, 5, 223, 71, 87]
let mut bytes_reversed = Vec::new();
    for i in string_to_bytes.iter().rev() {
        bytes_reversed.push(i);
    }
println!("Bytes reversed: {:x?}", bytes_reversed); //Prints: [57, 47, df, 5, 8e, 16, 9c, d5]
vhipe2zx

vhipe2zx2#

这也可以通过只使用字符串运算来获得具有反转的十六进制字符串["57", "47", "df", "05", "8e", "16", "9c", "d5"]Vec来解决
或相反的String"5747df058e169cd5"

let hex = "d59c168e05df4757"
    .chars()
    .collect::<Vec<char>>()
    .chunks(2)
    .map(|c2| c2.iter().collect::<String>())
    .rev()
    .collect::<Vec<String>>();

Playground

相关问题