Кто-нибудь понял, есть ли какая-либо встроенная функциональность в Go для преобразования из любого из числовых типов в свою двоичную числовую форму.
Например, если 123
был входом, строка "1111011"
была бы выходом.
Кто-нибудь понял, есть ли какая-либо встроенная функциональность в Go для преобразования из любого из числовых типов в свою двоичную числовую форму.
Например, если 123
был входом, строка "1111011"
была бы выходом.
В пакете strconv
есть FormatInt
, который принимает int64
и позволяет указать базу.
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 возвращает строковое представление я в данной базе, для 2 <= base <= 36. Результат использует строчные буквы 'a' to 'z' для цифровых значений >= 10.
См. также fmt пакет:
n := int64(123)
fmt.Printf("%b", n) // 1111011
Основываясь на ответе, предоставленном @Mark
Хотя ОП задал вопрос о том, как печатать целое число, я часто хочу посмотреть на данные размером более 64 бит, без ошеломляющих глаз:
/* --- 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()
}
см. этот код в play.golang.org Этот код работает с большими целыми числами *big.Int
:
x := big.NewInt(123)
s := fmt.Sprintf("%b", x)
// s == "1111011"
потому что *big.Int
реализует интерфейс fmt.Formatter
.
Взято из fooobar.com/info/187220/...