2015-09-03 18 views
16

Bir I2C veri yolunu okuyan ve verileri kaydeden bir Pas programı yazıyorum. I2C veriyolunu okuduğumda, 0x11, 0x22, vb gibi onaltılık değerlere sahip olurum.Onaltılık dize ondalık kesime dönüştürme

Şu an bunu yalnızca bir dizi olarak ele alıp olduğu gibi kaydedebilirim. Bunu bir tam sayıya bölüştürmenin bir yolu var mı? Bunun için herhangi bir işlev var mı?

cevap

25

from_str_radix kullanmak istiyorsunuz. Tamsayı türleri üzerinde uygulanır. Dizeleriniz aslında 0x öneki varsa

use std::i64; 

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

, o zaman üzerlerine atlamak gerekir. Bunu yapmanın en hızlı yolu şudur:

use std::i64; 

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

Bu harika, teşekkürler! Sadece açıklığa kavuşturmak için, '[2 ..]' ilk iki boşluğu nasıl atlıyorsunuz? ('0' ve 'x' üzerinde) – tsf144

+3

@ tsf144 gibi, sözdizimi dilimlemekte. & raw [2 ..] 'ham 'nin ikinci baytından başlayan' raw 'alt dizisidir. –

+0

@ tsf144 Sadece Vladimir ne dedi. Önemli olan, ** bytes ** olmasıdır. Bu durumda, ASCII kodlanmış dizeleri var gibi görünüyor, bu yüzden bir karakter == bir bayt. – Shepmaster

İlgili konular