数値型のいずれかを 2 進数形式に変換するための組み込み機能が Go にあるかどうか、誰かが考えを持っていますか?
たとえば、123
が入力の場合、文字列"1111011"
が出力になります。
strconv
パッケージには があり、FormatInt
を受け取り、int64
ベースを指定できます。
n := int64(123)
fmt.Println(strconv.FormatInt(n, 2)) // 1111011
デモ: http://play.golang.org/p/leGVAELMhv
http://golang.org/pkg/strconv/#FormatInt
func FormatInt(i int64, base int) string
FormatInt は、2 <= base <= 36 の場合、指定された基数で i の文字列表現を返します。結果は、数字の値 >= 10 に対して小文字の 'a' から 'z' を使用します。
fmtパッケージも参照してください。
n := int64(123)
fmt.Printf("%b", n) // 1111011
@Markが提供する回答に基づいて構築
OPは整数を出力する方法を尋ねましたが、私はしばしば、目がくらむことなく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 でこのコードを参照してください