binary - 如何将二进制值输入到 Rust 中的向量?
问题描述
我编写了一个简单的 ASCII 到字符串转换器,但在将其转换为二进制到字符串转换器时遇到了问题。
当我尝试输入二进制值时出现错误,向量插入会跳过输入中的起始零。
这是适用于 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;
}
不起作用的代码:
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;
}
错误:
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
解决方案
与零对应的字符在那里,但您看不到它们:
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);
}
}
我无法向您显示输出,因为 NUL 字符也会混淆 Stack Overflow 编辑器。:-)
推荐阅读
- python - 在 AWS S3 上将 CSV 文件合并到 XLS 或 XLSX
- django - Django REST Api 安全架构
- java - 现有的自动化测试框架 (Java) 每天晚上运行 E2E 测试还是从头开始创建应用程序?
- node.js - 如何使用 node.js 发送 html 需求文件?
- confluent-platform - 它是正确的 KSql 用例吗
- django - Django Q任务结果解密
- html - 如何在列表项中添加特定数量的句点?
- c - 如何正确使用 sched_yield()?
- django - 是否可以使用 Spotify API 让每个人都听一首歌?
- java - 在 Java 14 及更低版本上使用 InitialDirContext 获取 SRV 失败