2015-09-03 9 views
16

में कनवर्ट करना मैं एक जंग प्रोग्राम लिख रहा हूं जो आई 2 सी बस से पढ़ता है और डेटा बचाता है। जब मैं I2C बस पढ़ा है, मुझे अभी 0x11, 0x22, आदिहेक्साडेसिमल स्ट्रिंग को दशमलव

तरह स मान मिलता है, मैं केवल एक स्ट्रिंग के रूप में संभाल और इसे बचाने के लिए है के रूप में कर सकते हैं। क्या कोई तरीका है कि मैं इसे पूर्णांक में पार्स कर सकता हूं? क्या इसके लिए कोई अंतर्निहित कार्य है?

उत्तर

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 ..]' यह है कि आप पहले दो रिक्त स्थान कैसे छोड़ते हैं? (जैसे '0' और 'x') – tsf144

+3

@ tsf144, यह वाक्यविन्यास का टुकड़ा कर रहा है। 'और कच्चे [2 ..]' 'कच्चे' के दूसरे बाइट से शुरू होने वाले 'कच्चे' का एक सबस्ट्रिंग है। –

+0

@ tsf144 व्लादिमीर ने क्या कहा। महत्वपूर्ण हिस्सा यह है कि यह ** बाइट ** है। इस मामले में, ऐसा लगता है कि आपके पास ASCII-एन्कोडेड स्ट्रिंग्स हैं, इसलिए एक वर्ण == एक बाइट। – Shepmaster

संबंधित मुद्दे