2015-09-03 17 views
16

Ich schreibe ein Rust-Programm, das von einem I2C-Bus liest und die Daten speichert. Wenn ich den I2C-Bus gelesen, ich Hex-Werte wie 0x11 bekommen, 0x22 usw.Konvertieren hexadezimaler Zeichenfolge in dezimal

Gerade jetzt, kann ich dies nur handhaben als String und speichern, wie ist. Gibt es eine Möglichkeit, dies in eine ganze Zahl zu parsen? Gibt es eine eingebaute Funktion dafür?

Antwort

25

Sie möchten from_str_radix verwenden. Es ist auf den Integer-Typen implementiert.

use std::i64; 

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

Wenn die Saiten tatsächlich die 0x Präfix, dann müssen Sie über sie überspringen. Der schnellste Weg, das zu tun ist:

use std::i64; 

fn main() { 
    let raw = "0x1f"; 
    let z = i64::from_str_radix(&raw[2..], 16); 
    println!("{:?}", z); 
} 
+0

Das ist toll, danke! Nur um zu verdeutlichen, die "2 .." ist, wie Sie die ersten beiden Felder überspringen? (wie über '0' und 'x') – tsf144

+3

@ tsf144, ist es Slicing-Syntax. '& raw [2 ..]' ist eine Teilzeichenfolge von 'raw', beginnend mit dem zweiten Byte von' raw'. –

+0

@ tsf144 Genau das, was Vladimir gesagt hat. Der wichtige Teil ist, dass es ** Bytes ** ist. In diesem Fall sieht es so aus, als hätten Sie ASCII-codierte Strings, also ein Zeichen == ein Byte. – Shepmaster

Verwandte Themen