数値型のいずれかをそのバイナリ数値形式に変換するための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の場合、指定されたベースでiの文字列表現を返します。結果では、数字の値が10以上の場合、小文字の「a」から「z」を使用します。
fmt パッケージも参照してください:
n := int64(123)
fmt.Printf("%b", n) // 1111011
このコードは大きな整数で動作します*big.Int
:
x := big.NewInt(123)
s := fmt.Sprintf("%b", x)
// s == "1111011"
なぜなら*big.Int
はfmt.Formatter
インターフェイス。
バイナリ形式で負の数を正しく表すには、安全でないポインターを使用する必要があります。
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))
}