英文:
How to print a byte array as binary in golang?
问题
如何在Golang中将字节数组[]byte{255, 253}
以二进制形式打印出来?
即:
[]byte{255, 253} --> 1111111111111101
英文:
How to print a byte array []byte{255, 253}
as binary in Golang?
I.e.
[]byte{255, 253} --> 1111111111111101
答案1
得分: 21
我找到的最简单的方法是:
package main
import "fmt"
func main() {
bs := []byte{0x00, 0xfd}
for _, n := range bs {
fmt.Printf("%08b ", n) // 打印结果为 00000000 11111101
}
}
你可以在这个链接中的代码播放器中尝试这段代码:https://go.dev/play/p/piJV_3OTHae
英文:
Simplest way I have found:
package main
import "fmt"
func main() {
bs := []byte{0x00, 0xfd}
for _, n := range(bs) {
fmt.Printf("%08b ", n) // prints 00000000 11111101
}
}
Playground with this code: https://go.dev/play/p/piJV_3OTHae
答案2
得分: 1
使用这个简单版本的代码:
func 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()
}
printAsBinary([]byte{0, 1, 127, 255}) // 输出:00000000 00000001 01111111 11111111
这段代码的功能是将字节切片转换为二进制表示形式并打印出来。给定的字节切片是[]byte{0, 1, 127, 255}
,它将被转换为二进制字符串00000000 00000001 01111111 11111111
并打印出来。
英文:
Or use this simple version
func 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
答案3
得分: 0
fmt.Printf
可以打印切片和数组,并将格式应用于数组的元素。这样可以避免循环,并且让我们非常接近目标:
package main
import "fmt"
func main() {
bs := []byte{0xff, 0xfd}
fmt.Printf("%08b\n", bs) // 打印 [11111111 11111101]
}
上述代码的 Playground 链接:https://go.dev/play/p/8RjBJFFI4vf
可以使用 strings.Trim()
去除额外的括号(这是切片表示法的一部分):
fmt.Println(strings.Trim(fmt.Sprintf("%08b", bs), "[]")) // 打印 11111111 11111101
英文:
fmt.Printf
can print slices and arrays and applies the format to the elements of the array. This avoids the loop and gets us remarkably close:
package main
import "fmt"
func main() {
bs := []byte{0xff, 0xfd}
fmt.Printf("%08b\n", bs) // prints [11111111 11111101]
}
Playground with above code: https://go.dev/play/p/8RjBJFFI4vf
The extra brackets (which are part of the slice notation) can be removed with a strings.Trim()
:
fmt.Println(strings.Trim(fmt.Sprintf("%08b", bs), "[]")) // prints 11111111 11111101
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论