在Rust中是否有将二进制字符串转换为整数的方法?

25

我的二进制现在以字符串形式存在,我希望像将整数格式化为二进制那样,使用format!("{:b}", number)将其格式化为整数。

我有一个更大的二进制字符串,在循环中取出其中的片段,所以假设我的一个片段是:

let bin_idx: &str = "01110011001";

我想将那个二进制格式化为一个整数:

format!("{:i}", bin_idx);

这会导致编译错误:

error: unknown format trait `i`
 --> src/main.rs:3:21
  |
3 |     format!("{:i}", bin_idx);
  |                     ^^^^^^^

我还尝试过du,但是出现了相同的错误。

3个回答

63
首先,您应该使用官方文档;您指向的那些文档已经过时了。 您有一个字符串,但无法将其格式化为整数。我认为您想要的是解析器。以下是使用from_str_radix的版本:
fn main() {
    let bin_idx = "01110011001";
    let intval = isize::from_str_radix(bin_idx, 2).unwrap();
    println!("{}", intval);
}

(playground)


1

作为另一种选择,您可以使用:

let bstr = "11010101";
let i = i32::from_str_radix(bstr, 2).expect("Not a binary number!");
println!("{i}");

这应该打印出213

编辑:我之前回答的时候认为我的嵌入式Rust项目中没有isize,但事实上只是一个笔误...


0

我自己编写了一个函数,它能够正常工作!

fn binary_to_u32(s: String) -> u32 {
let mut binary_digit =  s.chars().count();
let mut real_num: u32 = 0;
for c in s.chars() { 
    let mut temp_var = 2u32.pow(binary_digit.try_into().unwrap());
    temp_var /= 2;
    if c == '1'{
        real_num += temp_var;
    }
    binary_digit -= 1;
}
return real_num; }

此外,如果您需要其他整数大小,只需在文本编辑器中使用替换快捷方式将 u32 更改为任何您喜欢的内容即可。

8
为什么要使用这个而不是经过全面测试的标准库中的那个? - Shepmaster
  1. 它适用于 Rust 中的所有整数类型。
  2. 我认为编写这个简单的函数比寻找可能不存在的东西更容易。
- Edmunds Beks
3
它适用于所有的整数类型,与现有答案一样。参见该链接 - Shepmaster
我不知道那个。谢谢!也许是因为我不擅长谷歌搜索,所以没有找到它。 - Edmunds Beks
此版本在循环中使用 pow 和 division 的性能不佳。相反,乘法和加法会更好。 - Dmitry Kochkin

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