2012-02-14 14 views
6

Ho scritto una soluzione stupida per questo, una ricetta migliore? Come puoi vedere molte conversioni inutili lì.Go - converte una stringa che rappresenta il numero binario in 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

Le risposte di seguito sono raccomandati, ma se si vuole veramente fare la conversione da soli, lo si può fare senza alcun aiuto dalle biblioteche. Rendi 'result' un int, e per ogni iterazione del ciclo,' result = (risultato << 1) | (n-'0 ') ' – axw

risposta

17

Se si utilizza la release corrente Go (release.r60.3), si desidera che la funzione strconv.Btoi64(), che converte da una base arbitraria.

package main 

import (
    "fmt" 
    "strconv" 
) 

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

Se stai usando Go 1, si desidera che la funzione strconv.ParseInt(), che converte da una base arbitraria, in una data dimensione po '.

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

Per esempio, su Go 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) 
} 

uscita:

13 
+1

Wow, hanno sicuramente cambiato il pacchetto' strconv' per Go 1. –

Problemi correlati