如何在Golang中将一个字节数组[]byte{255, 253}
打印为二进制?
例如,
[]byte{255, 253} --> 1111111111111101
我找到的最简单的方法:
package main
import "fmt"
func main() {
bs := []byte{0x00, 0xfd}
for _, n := range(bs) {
fmt.Printf("%08b ", n) // prints 00000000 11111101
}
}
使用此代码的游乐场:https://go.dev/play/p/piJV_3OTHae
strconv.FormatUint
,但是思路相同。 - JimBstrconv.FormatUint
打印二进制吗? - Pylinuxfmt.Printf
的替代品,我本来希望它是 for 循环的替代品 :-) - Pylinuxfmt.Printf
可以打印切片和数组,并将格式应用于数组的元素。这避免了循环并使我们非常接近:
package main
import "fmt"
func main() {
bs := []byte{0xff, 0xfd}
fmt.Printf("%08b\n", bs) // prints [11111111 11111101]
}
strings.Trim()
可以删除切片符号(这是切片表达式的一部分):fmt.Println(strings.Trim(fmt.Sprintf("%08b", bs), "[]")) // prints 11111111 11111101
strings.Trim()
是一个可选的额外操作。 - David Jonesfunc printAsBinary(bytes []byte) {
for i := 0; i < len(bytes); i++ {
for j := 0; j < 8; j++ {
zeroOrOne := bytes[i] >> (7 - j) & 1
fmt.Printf("%c", '0'+zeroOrOne)
}
fmt.Print(" ")
}
fmt.Println()
}
[]byte{0, 1, 127, 255} --> 00000000 00000001 01111111 11111111