1 回答

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
將整數(shù)轉(zhuǎn)換為字節(jié)數(shù)組
該表示法基本上是以 256 為基數(shù)。第一個(gè)字節(jié)將是round number % 256
.?然后將輪數(shù)除以256,如此重復(fù),直到輪數(shù)變?yōu)?。
由于 256 是一個(gè)特殊數(shù)字 (256 = 2?8?),因此您可以使用按位運(yùn)算進(jìn)行計(jì)算。例如,余數(shù)等于 的位掩碼0xff
,除以 256 等于右移 8。
big.Int
另請(qǐng)注意,標(biāo)準(zhǔn)庫(kù)中有一種類(lèi)型表示(有符號(hào))多精度整數(shù)。它有一個(gè)Int.Bytes()
方法將絕對(duì)值作為大端字節(jié)片返回。這“幾乎”是我們想要的,只是字節(jié)順序不同。因此,您可以簡(jiǎn)單地將整數(shù)轉(zhuǎn)換為big.Int
(例如使用該Int.SetString()
方法),獲取其字節(jié)切片并將其反轉(zhuǎn)。
迭代值
如果您不想轉(zhuǎn)換單個(gè)整數(shù)而只想迭代后續(xù)值,請(qǐng)按如下所示操作:
您從一個(gè)完整的零切片或數(shù)組開(kāi)始。
檢查切片的第一個(gè)元素。如果 < 255,只需將其加一。完成迭代。
如果是 255,則將其歸零,并嘗試對(duì)第二個(gè)元素執(zhí)行相同的操作:轉(zhuǎn)到步驟 2。
因此,如果您有一個(gè)狀態(tài),則可以通過(guò)以下方式計(jì)算下一個(gè)狀態(tài):
func next(data []byte) {
? ? for idx := range data {
? ? ? ? if data[idx] < 255 {
? ? ? ? ? ? data[idx]++
? ? ? ? ? ? return
? ? ? ? }
? ? ? ? data[idx] = 0
? ? }
? ? fmt.Println("overflow")
}
您可以這樣測(cè)試它:
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]
...
- 1 回答
- 0 關(guān)注
- 140 瀏覽
添加回答
舉報(bào)