为了账号安全,请及时绑定邮箱和手机立即绑定

循环将在 golang 中按 1 到 5 [] 字节的顺序输出

循环将在 golang 中按 1 到 5 [] 字节的顺序输出

Go
杨魅力 2022-11-08 16:32:25
如何制作一个按 1 到 5 [] 字节顺序输出的循环?这是我在输出中需要的:[0][1][2]...[255][0 1][1 1][2 1]...etc (to max 5 bytes)例如,如果我从数字进行正常循环并使用这些函数将它们转换为字节:for i := 0; i < 8589934590; i++ {    b : intToBytes(i)    fmt.Println(b)}func intToBytes(val int) []byte {    r := make([]byte, 5)    for i := int(0); i < 5; i++ {        r[i] = byte((val >> (8 * i)) & 0xff)    }    return r}输出末尾会有额外的零。如果这个选项是正确的,那么如何去掉多余的零?
查看完整描述

1 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

这是一个解决方案。使用 append 更新字节切片长度。当移位结果为零时停止。


package main


import "fmt"


func intToBytes(val int) []byte {

    b := make([]byte, 0, 5)

    for i := range b[:cap(b)] {

        v := val >> (8 * i)

        if v == 0 && i != 0 {

            break

        }

        b = append(b, byte(v))

    }

    return b

}


func main() {

    for i := 0; i < 4; i++ {

        b := intToBytes(i)

        fmt.Println(b)

    }

    fmt.Println("...")

    for i := 260 - 8; i < 260; i++ {

        b := intToBytes(i)

        fmt.Println(b)

    }

    fmt.Println("...")

    for i := 8589934590 - 4; i < 8589934590; i++ {

        b := intToBytes(i)

        fmt.Println(b)

    }

}

https://go.dev/play/p/b91oYBpOw_Y


[0]

[1]

[2]

[3]

...

[252]

[253]

[254]

[255]

[0 1]

[1 1]

[2 1]

[3 1]

...

[250 255 255 255 1]

[251 255 255 255 1]

[252 255 255 255 1]

[253 255 255 255 1]


查看完整回答
反对 回复 2022-11-08
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信