当前位置: 首页 > 知识库问答 >
问题:

将二进制字符串转换为十六进制字符串,前导零为Rust

黄修永
2023-03-14

编者按:此代码示例来自Rust 1.0之前的版本,并且在语法上是无效的Rust 1.0代码。此代码的更新版本会产生不同的错误,但答案仍然包含有价值的信息。

肯定有更好的方法将二进制字符串转换为十六进制字符串比这?

use std::num;

fn to_hex(val: &str, len: uint) {
    println!("Bin: {}", val);
    let mut int_val = 0i;
    for (i,c) in val.chars().enumerate() {      
        if c == '1' {
            int_val += num::pow(2i, i+1)/2;
        }
    }

    let f32_val = int_val as f32;
    let mut hex_val = std::f32::to_str_hex(f32_val).to_string();
    while hex_val.len() != len*2 {
        hex_val = "0".to_string() + hex_val;
    }
    println!("Hex: {} @ {} bytes", hex_val, len);
}

fn main() {
    let value = "0001111";
    to_hex(value,4);
}

这样做的结果是

Bin: 0001111
Hex: 00000078 @ 4 bytes

我用的是Rustc0.12。夜间

共有1个答案

姚航
2023-03-14

有一种方法可以用std::u32::from_str_radix格式以更简洁的形式完成您想要的任务 宏:

use std::u32;

fn to_hex(val: &str, len: usize) -> String {
    let n: u32 = u32::from_str_radix(val, 2).unwrap();
    format!("{:01$x}", n, len * 2)
}

fn main() {
    println!("{}", to_hex("110011111111101010110010000100", 6))
    // prints 000033feac84
}

格式语法可能有点模糊,但是01$x本质上意味着数字必须以十六进制形式打印,并填充零,直到作为第二个参数传递的长度(第一个以零为基础的索引)。

 类似资料:
  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示:

  • 问题内容: 我发现将十六进制转换为二进制的方式如下: 尽管此方法适用于较小的十六进制数,但以下十六进制数 抛出一个 因此,我编写了以下似乎可行的方法: 上面的方法基本上接受十六进制字符串中的每个字符,并在必要时将其转换为等价的二进制零,然后将其连接到返回值。这是执行转换的正确方法吗?还是我忽略了一些可能导致我的方法失败的事情? 在此先感谢您的协助。 问题答案: 会做你想要的。只需传递2的基数即可。

  • 问题内容: 我需要将二进制字符串转换为十六进制字符串,但是我有问题。我通过这种方法将二进制字符串转换为十六进制字符串: 没关系!但是我丢失了字符串左侧的零。例如: 该方法返回此:123456789ABCDEF,但我想返回此: 00000123456789ABCDEF 问题答案: 而不是我将使用解析值,然后以所需的宽度(在您的示例中为21)输出值:

  • 问题内容: 我也想将我的二进制(在字符串中)转换为十六进制字符串,这只是一个程序片段,因为该程序只是另一个更大程序的一部分: 问题是我不知道填充是否有效,但是我确定该程序返回了二进制字符串的错误十六进制转换,我正在尝试这样做: http://www.wikihow.com/Convert-Binary-to- Hexadecimal PS:我需要实现它(不使用任何内置函数) 问题答案: 如果您不必

  • 问题内容: 要将String转换为十六进制,我正在使用: 在此处投票最高的答案中对此进行了概述:在Java中将 字符串转换为十六进制 我该如何反向执行,即将十六进制转换为字符串? 问题答案: 您可以从转换后的字符串中进行重构,这是一种实现方法: 另一种方法是使用,从包: 单元测试以验证: 注:领先剥离的仅仅是必要的,因为的你的填充方法。如果您不介意将其替换为简单的,则可以将此行放在:

  • 问题内容: 我编写了一个简单的程序,用于在Java中向串行端口发送和接收数据。我通过回送测试(Rx到Tx)连接串行端口设备。它工作正常。但我无法发送和接收十六进制数据到串行端口和接收串行端口。在我的设备中使用了FT232BL芯片,因此是否需要任何dll或其他库来将十六进制数据发送和接收到串行端口设备。我的代码如下。 问题答案: 十六进制: 十六进制为: