Search code examples
parsinghexrust

Converting a hexadecimal string to a decimal integer


I'm writing a Rust program that reads off of an I2C bus and saves the data. When I read the I2C bus, I get hex values like 0x11, 0x22, etc.

Right now, I can only handle this as a string and save it as is. Is there a way I can parse this into an integer? Is there any built in function for it?


Solution

  • In most cases, you want to parse more than one hex byte at once. In those cases, use the hex crate.

    parse this into an integer

    You want to use from_str_radix. It's implemented on the integer types.

    use std::i64;
    
    fn main() {
        let z = i64::from_str_radix("1f", 16);
        println!("{:?}", z);
    }
    

    If your strings actually have the 0x prefix, then you will need to skip over them. The best way to do that is via trim_start_matches or strip_prefix:

    use std::i64;
    
    fn main() {
        let raw = "0x1f";
        let without_prefix = raw.trim_start_matches("0x");
        let z = i64::from_str_radix(without_prefix, 16);
        println!("{:?}", z);
    }