2012-02-14 24 views
6

में द्विआधारी संख्या का प्रतिनिधित्व करती है, मैंने इसके लिए एक बेवकूफ समाधान लिखा है, कोई बेहतर नुस्खा? जैसा कि आप वहां बहुत सारे बेकार रूपांतरण देख सकते हैं।जाओ - स्ट्रिंग कन्वर्ट करें जो int

package main 

import (
    "fmt" 
    "strconv" 
    "math" 
) 

func conv(str string) int { 
    l := len(str) 
    result := 0.0 
    for i,n := range str { 
     number,_ := strconv.Atof64(string(n)) 
     result += math.Exp2(float64(l-i-1))*number 
    } 
    return int(result) 
} 

func main() { 
    fmt.Println(conv("1001")) 
} 
+1

नीचे जवाब सिफारिश कर रहे हैं, लेकिन अगर आप वास्तव में रूपांतरण अपने आप को क्या करना चाहते हैं, तो आप यह कर सकते हैं पुस्तकालयों से किसी भी मदद के बिना। 'परिणाम' एक int बनाओ, और लूप के प्रत्येक पुनरावृत्ति के लिए, 'परिणाम = (परिणाम << 1) | (n-'0') ' – axw

उत्तर

17

आप वर्तमान जाओ रिलीज (release.r60.3) का उपयोग कर रहे हैं, तो आप strconv.Btoi64() समारोह है, जो एक मनमाना आधार से धर्मान्तरित चाहते हैं।

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 
    if i, err := strconv.Btoi64("1001", 2); err != nil { 
     fmt.Println(err) 
    } else { 
     fmt.Println(i) 
    } 
} 

आपके द्वारा जाएं 1 का उपयोग कर रहे हैं, तो आप strconv.ParseInt() समारोह है, जो एक मनमाना आधार से धर्मान्तरित एक दिया सा आकार में, चाहते हैं।

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 
    if i, err := strconv.ParseInt("1001", 2, 64); err != nil { 
     fmt.Println(err) 
    } else { 
     fmt.Println(i) 
    } 
} 
6
उदाहरण के लिए

, गो 1 पर,

package main 

import (
    "fmt" 
    "strconv" 
) 

func main() { 
    i, err := strconv.ParseInt("1101", 2, 64) 
    if err != nil { 
     fmt.Println(err) 
     return 
    } 
    fmt.Println(i) 
} 

आउटपुट:

13 
+1

वाह, उन्होंने निश्चित रूप से Go 1 के लिए' strconv' पैकेज को बदल दिया। –

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