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.
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.
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.
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.
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
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()
}
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.