Go 循环遍历字节数组的所有值

Go 循环遍历字节数组的所有值,go,recursion,Go,Recursion,我试图循环遍历一个小字节数组(64字节)的所有值。我想以数字时钟的方式递增,从索引0开始,到0-255,然后递增索引1,重复。我知道这可能是一种递归方法,但我无法理解逻辑 因此,基本上,对于4字节数组(为方便起见更小) 第一轮 值:[0] 第256轮 值[255 0 0] 第256轮 值[0 1 0 0] 第257轮 数值[11 0] 到目前为止,我所拥有的: func allValues() { currentPlaceIndex := 0 content := make([]

我试图循环遍历一个小字节数组(64字节)的所有值。我想以数字时钟的方式递增,从索引0开始,到0-255,然后递增索引1,重复。我知道这可能是一种递归方法,但我无法理解逻辑

因此,基本上,对于4字节数组(为方便起见更小)

第一轮

值:[0]

第256轮

值[255 0 0]

第256轮

值[0 1 0 0]

第257轮

数值[11 0]

到目前为止,我所拥有的:

func allValues() {
    currentPlaceIndex := 0
    content := make([]uint8, 64)
    max := 256

    for i := 0; i < max; i++ {
        content[currentPlaceIndex] = uint8(i)
    }
    fmt.Println(content)
    content[currentPlaceIndex] = 0

}
func allValues(){
currentPlaceIndex:=0
内容:=make([]uint8,64)
最大值:=256
对于i:=0;i
我似乎不知道如何递归这个。

将整数转换为字节数组 这种表示法基本上是以256为基数的。第一个字节将是
整数%256
。然后将整数除以256,然后重复,直到整数变为0

由于256是一个特殊的数字(256=28),您可以使用位运算进行计算。例如,余数等于使用
0xff
进行位屏蔽,除以256等于向右移位8

还要注意,标准库中有一个类型表示(有符号)多精度整数。它有一个方法,将绝对值作为大端字节片返回。这几乎就是我们想要的,只是字节顺序不同而已。因此,您可以简单地将一个整数转换为
big.Int
(例如,使用该方法),获取其字节片并将其反转

对值进行迭代 如果您不想转换单个整数,而只是迭代后续的值,则按如下方式执行:

  • 从一个完整的零片或数组开始

  • 检查切片的第一个元素。如果<255,只需将其增加1。完成迭代

  • 如果是255,则将其归零,并尝试对第二个元素执行相同操作:转至步骤2

  • 如果你有一个状态,这就是你如何计算下一个状态的方法:

    func next(data []byte) {
        for idx := range data {
            if data[idx] < 255 {
                data[idx]++
                return
            }
            data[idx] = 0
        }
        fmt.Println("overflow")
    }
    

    根据我的计算,此数组可能处于256^64=2^512个状态。我认为在宇宙热死之前,你不可能真实地循环所有这些组合。那最好现在就开始!jk。。。看来你已经回答了我应该问的问题。你在回答中的第一件事。。。我想了想。我不确定我是否可以基本上创建自己的数据类型?基数为256的整数?@Jeff这正是表示法的含义。但是这个“数据结构”基本上只是一个字节片:
    []字节
    。我以前从未做过按位操作。这是更好的方法吗?@Jeff第一部分是如果你想把一个任意的整数转换成这个字节片。如果您只想按顺序生成它们,那么第二部分将介绍这一点。
    data := make([]byte, 64)
    for iter := 0; iter < 600; iter++ {
        next(data)
        fmt.Println(data)
    }
    
    [1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    [2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    [3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    ...
    [255 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    [1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    ...
    [255 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    [0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    [1 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    [2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
    ...