序列应与IS
000102030405060708090a0b0c0d0e0f
结果应该是:
00102030405060708090a0b0c0d0e0f0
我得到不同结果的原因是Rust将内容读为ASCII,因此:
buffer: [48, 48, 49, 49, 50, 50, 51, 51, 52, 52, 53, 53, 54, 54, 55, 55]
buffer: [56, 56, 57, 57, 97, 97, 98, 98, 99, 99, 100, 100, 101, 101, 102, 102]
有一种方法可以将内容直接读取到十六进制阵列,或者如何将其转换?
您可以使用hex :: decode将十六进制转换为字节,然后使用'^'符号用位进行XOR操作以获取结果。
let mut buffer = [0;16];
while let Ok(n) = file.read(&mut buffer) {
if n == 0 {
break;
}
let s = match str::from_utf8(&buffer) {
Ok(str) => str,
Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
};
let mut content = s.to_string();
let char_vec: Vec<char> = content.chars().collect();
println!("Chars{:?}", char_vec);
}