亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

循環遍歷字節數組的所有值

循環遍歷字節數組的所有值

Go
慕田峪7331174 2023-07-10 17:45:21
我正在嘗試循環遍歷小字節數組(64 字節)的所有值。我想以數字時鐘的方式遞增,從索引 0 開始,到 0-255,然后遞增索引 1,重復。我知道這可能是一種遞歸方法,但我無法理解其中的邏輯。基本上,對于 4 字節數組(為了方便而較?。┑?輪值:[0 0 0 0]第256輪值 [255 0 0 0]第256輪值[0 1 0 0]第257輪值[1 1 0 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}我似乎不知道如何遞歸這個。
查看完整描述

1 回答

?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

將整數轉換為字節數組

該表示法基本上是以 256 為基數。第一個字節將是round number % 256.?然后將輪數除以256,如此重復,直到輪數變為0。

由于 256 是一個特殊數字 (256 = 2?8?),因此您可以使用按位運算進行計算。例如,余數等于 的位掩碼0xff,除以 256 等于右移 8。

big.Int另請注意,標準庫中有一種類型表示(有符號)多精度整數。它有一個Int.Bytes()方法將絕對值作為大端字節片返回。這“幾乎”是我們想要的,只是字節順序不同。因此,您可以簡單地將整數轉換為big.Int(例如使用該Int.SetString()方法),獲取其字節切片并將其反轉。

迭代值

如果您不想轉換單個整數而只想迭代后續值,請按如下所示操作:

  1. 您從一個完整的零切片或數組開始。

  2. 檢查切片的第一個元素。如果 < 255,只需將其加一。完成迭代。

  3. 如果是 255,則將其歸零,并嘗試對第二個元素執行相同的操作:轉到步驟 2。

因此,如果您有一個狀態,則可以通過以下方式計算下一個狀態:

func next(data []byte) {

? ? for idx := range data {

? ? ? ? if data[idx] < 255 {

? ? ? ? ? ? data[idx]++

? ? ? ? ? ? return

? ? ? ? }

? ? ? ? data[idx] = 0

? ? }

? ? fmt.Println("overflow")

}

您可以這樣測試它:


data := make([]byte, 64)

for iter := 0; iter < 600; iter++ {

? ? next(data)

? ? fmt.Println(data)

}

這將輸出(在Go Playground上嘗試):


[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]

...


查看完整回答
反對 回復 2023-07-10
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號