2012-02-14 10 views
6

私はこれよりも優れたレシピを作成しましたか? あなたは無駄なコンバージョンをたくさん見ることができます。2進数を表す文字列を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 =(result << 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'パッケージを変更しました。 –

関連する問題