將整數轉換為字節數組
該表示法基本上是以 256 為基數。第一個字節將是round number % 256
.?然后將輪數除以256,如此重復,直到輪數變為0。
由于 256 是一個特殊數字 (256 = 2?8?),因此您可以使用按位運算進行計算。例如,余數等于 的位掩碼0xff
,除以 256 等于右移 8。
big.Int
另請注意,標準庫中有一種類型表示(有符號)多精度整數。它有一個Int.Bytes()
方法將絕對值作為大端字節片返回。這“幾乎”是我們想要的,只是字節順序不同。因此,您可以簡單地將整數轉換為big.Int
(例如使用該Int.SetString()
方法),獲取其字節切片并將其反轉。
迭代值
如果您不想轉換單個整數而只想迭代后續值,請按如下所示操作:
您從一個完整的零切片或數組開始。
檢查切片的第一個元素。如果 < 255,只需將其加一。完成迭代。
如果是 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]
...