我正在编写一个boolfuck解释器,我需要将某些内容转换为8位。
如果我使用10
存储Vec<u8>
(应该是01100001
),我该如何将其转换为0b01100001u8 as char == 'a'
?
如果我输入char
(例如:Vec<u8>
},我该如何将其转换为8位?
有没有更好的方法呢?
答案 0 :(得分:1)
这是我的解决方案:
true
的{p> 1
,false
的{{1}}
0
至u8
:
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);
}