在Rust中读取和写入8位的更好的方法是什么?

时间:2017-11-05 07:15:50

标签: binary rust

我正在编写一个boolfuck解释器,我需要将某些内容转换为8位。

如果我使用10存储Vec<u8>(应该是01100001),我该如何将其转换为0b01100001u8 as char == 'a'

如果我输入char(例如:Vec<u8>},我该如何将其转换为8位?

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

这是我的解决方案:

true的{​​p> 1false的{​​{1}}

0u8

Vec<bool>

let input = b"Hello, world!".to_vec(); let input_stream: Vec<bool> = { let mut string = String::new(); for char in input { string += &format!("{:08b}", char); } string.chars().collect::<Vec<char>>() .chunks_mut(8) .map(|chunk| chunk.iter().rev().collect::<String>()) .collect::<String>() .chars().map(|c| c == '1') .collect() }; Vec<bool>

u8类似于output_stream,但在这种情况下它是10001001...

true false false...

将字符串转换为位的更好解决方案:

let mut chunks = output_stream.chunks(8);
let mut output = Vec::new();

while let Some(chunk) = chunks.next() {
    let mut chunk = chunk.to_vec();
    let mut char = 0b00000000u8;

    while chunk.len() != 8 { chunk.push(false); }

    for (carry_bit, flag) in chunk.iter().enumerate() {
        if *flag { char += 0b00000001u8 << carry_bit }
    }

    output.push(char);
}