[英]How can I input binary values to a vector in Rust?
I have programmed a simple ASCII to string converter but I am facing problems in turning it to a binary to string converter. 我已经编写了一个简单的ASCII到字符串转换器的程序,但是在将其转换为二进制到字符串转换器时遇到了问题。
When I try to input binary values I am getting an error and the vector insertion skips the starting zeros in the input. 当我尝试输入二进制值时,出现错误,向量插入会跳过输入中的起始零。
This is the code that works with ASCII decimal values: 这是使用ASCII十进制值的代码:
use std::*;
fn main() {
println!("AregevDev's binary to string converter!");
println!("Enter a sequence of binary values:");
let mut int_seq: Vec<u32> = Vec::new();
loop {
let mut it = String::new();
io::stdin()
.read_line(&mut it)
.expect("Failed to read line!");
let num = match it.trim().parse::<u32>() {
Ok(num) => num,
Err(_) => break,
};
int_seq.push(num);
}
println!("Converted string: {}", binary_to_string(&int_seq));
}
fn binary_to_string(vec: &Vec<u32>) -> String {
let mut result = String::new();
for u in vec.iter() {
let ch = char::from_u32(*u).unwrap();
result.push(ch);
}
return result;
}
Code that does not work: 无效的代码:
use std::*;
fn main() {
println!("AregevDev's binary to string converter!");
println!("Enter a sequence of binary values:");
let mut int_seq: Vec<u32> = Vec::new();
loop {
let mut it = String::new();
io::stdin()
.read_line(&mut it)
.expect("Failed to read line!");
let num = match it.trim().parse::<u32>() {
Ok(num) => num,
Err(_) => break,
};
int_seq.push(num);
}
println!("Vec: {:?}", int_seq);
println!("Converted string: {:?}", binary_to_string(&int_seq));
}
fn binary_to_string(vec: &Vec<u32>) -> String {
let mut result = String::new();
for u in vec.iter() {
let ch = char::from_digit(*u, 2).unwrap();
result.push(ch);
}
return result;
}
Error: 错误:
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', libcore/option.rs:345:21
stack backtrace:
0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: std::sys_common::backtrace::print
at libstd/sys_common/backtrace.rs:71
at libstd/sys_common/backtrace.rs:59
2: std::panicking::default_hook::{{closure}}
at libstd/panicking.rs:211
3: std::panicking::default_hook
at libstd/panicking.rs:227
4: std::panicking::rust_panic_with_hook
at libstd/panicking.rs:511
5: std::panicking::continue_panic_fmt
at libstd/panicking.rs:426
6: rust_begin_unwind
at libstd/panicking.rs:337
7: core::panicking::panic_fmt
at libcore/panicking.rs:92
8: core::panicking::panic
at libcore/panicking.rs:53
9: rust_practices::main
10: std::rt::lang_start::{{closure}}
11: std::panicking::try::do_call
at libstd/rt.rs:59
at libstd/panicking.rs:310
12: __rust_maybe_catch_panic
at libpanic_unwind/lib.rs:105
13: std::rt::lang_start_internal
at libstd/panicking.rs:289
at libstd/panic.rs:392
at libstd/rt.rs:58
14: main
15: __libc_start_main
16: _start
The characters corresponding to zeros are there, but you can't see them: 零对应的字符在那里,但是您看不到它们:
fn main() {
let mut s = String::new();
s.push(char::from(0));
s.push('a');
s.push('b');
println!("Hello, {}!", s);
println!("{:?}", s);
for c in s.chars() {
println!("{}", c as u32);
}
}
I can't show you the output, because the NUL character confuses the Stack Overflow editor as well. 我无法显示输出,因为NUL字符也使Stack Overflow编辑器混乱。 :-) :-)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.