从整数转换为其二进制表示

问题描述 投票:52回答:5

有没有人知道Go中是否有任何内置功能可以从任何一种数字类型转换为二进制数字形式。

例如,如果123是输入,则字符串"1111011"将是输出。

binary go numeric
5个回答
84
投票

strconv包有FormatInt,它接受int64并允许你指定基地。

n := int64(123)

fmt.Println(strconv.FormatInt(n, 2)) // 1111011

但是:ぁzxswい

http://play.golang.org/p/leGVAELMhv

http://golang.org/pkg/strconv/#FormatInt

FormatInt返回给定基数中i的字符串表示形式,对于2 <= base <= 36.结果使用小写字母'a'到'z'表示数字值> = 10。


40
投票

另见func FormatInt(i int64, base int) string包:

fmt

5
投票

此代码适用于大整数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


2
投票

基于@Mark提供的答案

尽管OP询问如何打印整数,但我经常想要查看超过64位的数据,而我的眼睛却难以置信:

https://stackoverflow.com/a/23317788/871134
/* --- 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() }

1
投票

必须使用不安全指针以二进制格式正确表示负数。

see this code in play.golang.org

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

© www.soinside.com 2019 - 2024. All rights reserved.