2012-02-14 144 views
6

我爲此寫了一個愚蠢的解決方案,任何更好的配方? 正如你可以看到很多無用的轉換。Go - 將表示二進制數的字符串轉換爲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

下面的答案被推薦,但如果你真的想自己做轉換,你可以做到這一點沒有任何圖書館的幫助。讓'result'成爲int,並且對於循環的每次迭代,結果=(result << 1)|(n-'0')' – axw 2012-02-14 06:04:31

回答

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'包。 – 2012-02-14 05:39:05

相關問題