2015-09-03 170 views
16

私はI2Cバスを読み込んでデータを保存するRustプログラムを書いています。私はI2Cバスを読むと、0x11,0x22などのような16進値を得ます。16進文字列を10進数に変換する

今私はこれを文字列として扱い、それをそのまま保存することができます。これを整数に解析できる方法はありますか?そのための関数が組み込まれていますか?

答えて

25

from_str_radixを使用します。これは整数型で実装されています。

use std::i64; 

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

あなたの文字列が実際に0x接頭辞を持っている場合は、それらをスキップする必要があります。これを行う最も簡単な方法は次のとおりです。

use std::i64; 

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

本当にありがとうございます。明確にするために、「[2 ..]」は最初の2つのスペースをスキップする方法です。 ( '0'や 'x'以上のような) – tsf144

+3

@ tsf144では、構文をスライスしています。 '&raw [2 ..]'は 'raw'の2番目のバイトから始まる' raw'の部分文字列です。 –

+0

@ tsf144ちょうどウラジミールは言った。重要なのは**バイト**です。この場合、ASCIIエンコードされた文字列があるように見えます。したがって、1文字== 1バイトです。 – Shepmaster

関連する問題