web-dev-qa-db-fra.com

Conversion d'un entier en sa représentation binaire

Quelqu'un a-t-il une idée s'il existe une fonctionnalité intégrée dans Go pour la conversion de l'un des types numériques vers sa forme numérique binaire.

Par exemple, si 123 était l'entrée, la chaîne "1111011" serait la sortie.

54
cobie

Le package strconv a FormatInt, qui accepte un int64 Et vous permet de spécifier la base.

n := int64(123)

fmt.Println(strconv.FormatInt(n, 2)) // 1111011

DEMO: http://play.golang.org/p/leGVAELMhv

http://golang.org/pkg/strconv/#FormatInt

func FormatInt(i int64, base int) string

FormatInt renvoie la représentation sous forme de chaîne de i dans la base donnée, pour 2 <= base <= 36. Le résultat utilise les lettres minuscules 'a' à 'z' pour les valeurs numériques> = 10.

85
I Hate Lazy

Voir aussi le package fmt :

n := int64(123)
fmt.Printf("%b", n)  // 1111011
42
Mark

Ce code fonctionne sur les grands entiers *big.Int:

x := big.NewInt(123)
s := fmt.Sprintf("%b", x)
// s == "1111011"

car *big.Int implémente le fmt.Formatter interface.

Tiré de https://stackoverflow.com/a/23317788/871134

5
Deleplace

Des pointeurs dangereux doivent être utilisés pour représenter correctement les nombres négatifs au format binaire.

package main

import (
    "fmt"
    "strconv"
    "unsafe"
)

func bInt(n int64) string {
    return strconv.FormatUint(*(*uint64)(unsafe.Pointer(&n)), 2)
}

func main() {
    fmt.Println(bInt(-1))
}

https://play.golang.org/p/GxXjjWMyC4x

1
Soslan