Rust:将二进制字符串表示转换为ASCII字符串

3
我正在尝试将包含一些ASCII文本的二进制表示的字符串转换回ASCII文本。我有以下的&str: let binary: &str = "01010010 01110101 01110011 01110100 01100001 01100011 01100101 01100001 01101110 01110011";
我想将这个&str转换为ASCII版本,即单词:"Rustaceans"。目前,我是按以下方式将此单词转换为二进制的:
fn to_binary(s: &str) -> String {
  let mut binary = String::default();
  let ascii: String = s.into();

  for character in ascii.clone().into_bytes() {
    binary += &format!("0{:b} ", character);
  }

  // removes the trailing space at the end
  binary.pop();

  binary
}

来源

我正在寻找一个函数,它可以接受 to_binary 的输出并返回 "Rustaceans"

提前感谢!


5
这听起来很像一项课堂作业。 - NovaDenizen
1
寻找一个函数,它可以接收 to_binary 的输出并返回 "Rustaceans"。在标准库中没有这样的函数,你必须去编写它(我认为这就是整个练习的重点)。 - Masklinn
2个回答

3

由于所有的文本都是ASCII文本,您可以使用u8::from_str_radix,以下是演示:

use std::{num::ParseIntError};

pub fn decode_binary(s: &str) -> Result<Vec<u8>, ParseIntError> {
    (0..s.len())
        .step_by(9)
        .map(|i| u8::from_str_radix(&s[i..i + 8], 2))
        .collect()
}

fn main() -> Result<(), ParseIntError> {
    let binary: &str = "01010010 01110101 01110011 01110100 01100001 01100011 01100101 01100001 01101110 01110011";
    println!("{:?}", String::from_utf8(decode_binary(binary)?));
    Ok(())
}

游乐场

String::from 更易读,如果你需要 &str 类型,请使用以下转换器:

std::str::from_utf8(&decode_binary(binary)?)

1
这里有一个简单的组合str::split, u32::from_str_radix和(目前)不稳定的char::char_from_u32,您可以用来实现此功能:
#![feature(assoc_char_funcs)]

fn bin_str_to_word(bin_str: &str) -> String {
    bin_str.split(" ")
    .map(|n| u32::from_str_radix(n, 2).unwrap())
    .map(|c| char::from_u32(c).unwrap())
    .collect()
}

fn main() {
    let binary: &str = "01010010 01110101 01110011 01110100 01100001 01100011 01100101 01100001 01101110 01110011";
    let word : String = bin_str_to_word(binary);
    println!("{}", word);
}

{{链接1:游乐场}}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接