Binary 如何将二进制值输入到Rust中的向量?

Binary 如何将二进制值输入到Rust中的向量?,binary,rust,Binary,Rust,我已经编写了一个简单的ASCII到字符串转换器,但在将其转换为二进制到字符串转换器时遇到了问题 当我尝试输入二进制值时,我得到了一个错误,向量插入跳过了输入中的起始零 这是使用ASCII十进制值的代码: use std::*; fn main() { println!("AregevDev's binary to string converter!"); println!("Enter a sequence of binary values:"); let mut i

我已经编写了一个简单的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;
}

与零对应的字符在那里,但您看不到它们:

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字符也会混淆堆栈溢出编辑器。:-)

与零对应的字符在那里,但您看不到它们:

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字符也会混淆堆栈溢出编辑器。:-)

它可能在那里。你就是看不见,因为NUL字符是不可见的。。。。而且它混淆了大多数用C编写的应用程序(我试着复制并粘贴到
hd
):-)当你的代码演示一个问题依赖于手动输入时,这不是一个好主意。它可能存在。你就是看不见,因为NUL字符是不可见的。。。。而且它混淆了大多数用C编写的应用程序(我试着复制并粘贴到
hd
):-)如果您的代码演示问题依赖于手动输入,这不是一个好主意。您可以像下面这样构建字符串
let s:string=vec![char::from(0),'a','b'].into_iter().collect()
而不是手动按下
char
s。您可以在调试模式下打印,尽管
'\u{0}'
可能不是一个明显的景象。@ljedrz我想用显示模式来演示不可见性,但同时使用显示和调试模式很好。@Boiethios在这里一个接一个地按下它们更好,因为它更接近OP的代码。你可以像这样构建字符串
let s:string=vec![char::from(0),'a','b'].into_iter().collect()
而不是手动按下
char
s。您可以在调试模式下打印,尽管
'\u{0}'
可能不太明显。@ljedrz我想用显示模式来演示不可见性,但同时使用显示和调试模式很好。@Boiethios在这里一个接一个地按下它们会更好,因为它更接近OP的代码。