Rust: Как читать гекс из файла - PullRequest
0 голосов
/ 01 мая 2020

Я хочу прочитать некоторые данные из файла, чтобы исправить это с помощью другой последовательности. Содержимое файла:

00112233445566778899aabbccddeeff

Последовательность, к которой следует добавить эту строку:

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]

Есть ли способ прочитать содержимое непосредственно в шестнадцатеричный массив или как его преобразовать?

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Это делает работу, читает 16-байтовые блоки до конца файла, преобразует его в & str и снова преобразовывает его в вектор символов:

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);
    }
0 голосов
/ 01 мая 2020

Вы можете использовать hex :: decode для преобразования hex в байты, а затем использовать символ '^' для выполнения операции xor с битами для получения вашего результата.

...