2015-05-18 4 views
8

मैं गो-लैंग में पूर्णांक में स्ट्रिंग को पार्स करने की कोशिश कर रहा हूं। समस्या मैं इसके साथ पाया दस्तावेज में है इसकी उल्लेख वाक्य रचना इस प्रकार है:गोलांग स्ट्रिंग को विशिष्ट प्रकार के int (int8, int16, int32, int64) में परिवर्तित करने के लिए

ParseInt(s string, base int, bitSize int) 

जहां, s स्ट्रिंग पार्स किया जा सकता, base स्ट्रिंग के उपसर्ग से गर्भित है: "0x" के लिए आधार 16, आधार 8 "0" के लिए, और आधार 10 अन्यथा।

bitSize पैरामीटर है जहां मुझे समस्या का सामना करना पड़ रहा है। ParseInt के दस्तावेज़ीकरण के अनुसार, यह पूर्णांक प्रकार निर्दिष्ट करता है जिसके परिणामस्वरूप फिट होना चाहिए। बिट आकार 0, 8, 16, 32, और 64 int, int8, int16, int32, और int64 से मेल खाते हैं।

लेकिन सभी मानों के लिए 0,8,16,32 & 64. मुझे एक ही प्रकार का रिटर्न वैल्यू मिल रहा है। int64 प्रकार का i.e।

क्या कोई मुझे बता सकता है कि मुझे क्या याद आ रहा है।

कोड: https://play.golang.org/p/F3LbUh_maY

उत्तर

15

के अनुसार documentation

समारोह ParseInt (रों स्ट्रिंग, आधार पूर्णांक, bitSize पूर्णांक) (i Int64, त्रुटि गलती)

ParseInt हमेशा वापसी int64 कोई फर्क नहीं पड़ता कि क्या। इसके अलावा

bitSize तर्क पूर्णांक प्रकार है कि परिणाम

तो मूल रूप से अपने bitSize पैरामीटर में फिट करना चाहिए निर्दिष्ट करता है केवल बताता है कि स्ट्रिंग मान है कि आप को पार्स करने के बाद bitSize फिट चाहिए जा रहे हैं पार्स करने। यदि नहीं, तो सीमा से बाहर होगा।

की तरह इस PlayGround: strconv.ParseInt("192", 10, 8) (जैसा कि आप देख के रूप में पार्स के बाद मूल्य int8 का अधिकतम मान से भी बड़ा हो जाएगा)।

आप जो कुछ भी मूल्य आप की जरूरत के लिए यह पार्स करने के लिए चाहते हैं, बस बाद में (int8, int16, int32) int8(i) का उपयोग करें।

पीएस क्योंकि आपने इस विषय को स्पर्श किया है कि विशिष्ट intX में कैसे परिवर्तित किया जाए, मैं यह रेखांकित करता हूं कि unsigned int में कनवर्ट करना भी संभव है।

8

ParseInt हमेशा एक int64 देता है, और आप अपने इच्छित प्रकार के परिणाम में परिवर्तित करने की जरूरत है। जब आप 32 को तीसरे तर्क के रूप में पास करते हैं, तो आपको पार्स त्रुटि मिलेगी यदि पार्स किए गए मान int32 में फिट नहीं होंगे, लेकिन लौटा प्रकार हमेशा int64 होता है।

उदाहरण के लिए:

i, err := strconv.ParseInt("9207", 10, 32) 
if err != nil { 
    panic(err) 
} 
result := int32(i) 
fmt.Printf("Parsed int is %d\n", result) 
संबंधित मुद्दे