2016-12-29 1 views
4

質問にはどのようにこれを達成するのですか?私はこのようなコードがある場合はu32にcharをパースする

:私は得る何

let a = "29"; 
for c in a.chars() { 
    println!("{}", c as u32); 
} 

を2と9のUnicodeコードポイントである:

何Iそれらの文字を実際の数字に解析することが必要です。

答えて

9

char::to_digit(radix)です。 radixは、「ベース」、進の小数点システムのための、すなわち10、16、等:

let a = "29"; 
for c in a.chars() { 
    println!("{:?}", c.to_digit(10)); 
} 

それはOptionを返すを示し、あなたはunwrap()にそれを必要とする、またはより良い:expect("that's no number!")を。適切なエラー処理の詳細については、the appropriate chapter of the Rust bookを参照してください。

+1

ありがとう、私はSOのなんて愚かなユーザーのように感じる。私は、Rustを学ぶ際に抱えている主な問題の1つが、ドキュメントをナビゲートしていると思います。あなたがgoogle "Rust Char"を使用している場合は、あなたが言及した方法を含まない[link](https://doc.rust-lang.org/std/char/)のモジュールのドキュメントを入手します。私はそれがモジュールではなくタイプの一部であることが分かりました。ドキュメントから「見える」ことは明らかではないようです。 もう一度おねがいします! – Dash83

+1

私は錆の初心者として、これは私が答えることができる最初の錆の質問だった:-)ドキュメントについて:私はダッシュをMacに使用しています。これはあなたがリンクしたドキュメントのラッパーですが、何とか私は(例えば、charの検索でプリミティブタイプになり、モジュールではない) – hansaplast

+0

ダッシュを聞いたことがない(面白い、私のユーザー名が与えられている)。あなたは私の心を吹き飛ばした。親切な見知らぬ人、ありがとう。 – Dash83

1

さて、あなたは常に次のハックソリューションを使用することができます。

fn main() { 
    let a = "29"; 
    for c in a.chars() { 
     println!("{}", c as u32 - 48); 
    } 
} 

ASCII数字は、48から57までの値でエンコードされますので、文字2と9を含む文字列を持っているとしてそれを解釈しようとするとあなたは50と57を得ます。期待値を得るには、それらから48を引くだけです。

+0

@hansaplastの答えはちょうど私が探していたものです。しかし、ありがとう。 – Dash83