94 votes

Conversion d'un nombre entier en sa représentation binaire

Quelqu'un a-t-il une idée de l'existence d'une fonctionnalité intégrée dans Go pour convertir n'importe lequel des types numériques en sa forme binaire ?

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

134voto

I Hate Lazy Points 18168

En strconv Le paquet 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 de la chaîne de caractères 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.

76voto

Mark Points 898

Voir également le fmt paquet :

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

11voto

Ripounet Points 1099

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

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

parce que *big.Int met en œuvre la fmt.Formatter interface.

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

11voto

sjas Points 3175
package main

import . "fmt"

func main(){
    Printf("%d == %08b\n",0,0)
    Printf("%d == %08b\n",1,1)
    Printf("%d == %08b\n",2,2)
    Printf("%d == %08b\n",3,3)
    Printf("%d == %08b\n",4,4)
    Printf("%d == %08b\n",5,5)
}

résulte dans :

0 == 00000000
1 == 00000001
2 == 00000010
3 == 00000011
4 == 00000100
5 == 00000101

3voto

Luke Antins Points 1317

Dans le prolongement de la réponse fournie par @Mark

Bien que l'OP ait demandé comment imprimer un nombre entier, je veux souvent regarder plus de 64 bits de données, sans que mes yeux ne se troublent :

/* --- Credit to Dave C in the comments --- */
package main

import (
    "bytes"
    "fmt"
)

func main() {
    fmt.Printf("<%s>\n", fmtBits([]byte{0xDE, 0xAD, 0xBE, 0xEF, 0xF0, 0x0D, 0xDE, 0xAD, 0xBE, 0xEF, 0xF0, 0x0D}))

    // OUTPUT:
    // <11011110 10101101 10111110 11101111 11110000 00001101 11011110 10101101 10111110 11101111 11110000 00001101>
}

func fmtBits(data []byte) []byte {
    var buf bytes.Buffer
    for _, b := range data {
        fmt.Fprintf(&buf, "%08b ", b)
    }
    buf.Truncate(buf.Len() - 1) // To remove extra space
    return buf.Bytes()
}

voir ce code dans play.golang.org

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X