我正在try 将Go Big.Int转换为[2]int64,它将表示一个128位的整数.其思想是能够与Rust的i128::to_le_bytes()相匹配,后者将128位有符号整数编码为小端字节顺序.这个例子与Rust的i128::to_le_bytes()
相匹配.每当我try 将其转换回Big.Int时,我都得不到相同的值.在做最初的右移时有什么损失吗?谢谢.
package main
import (
"encoding/binary"
"fmt"
"math/big"
)
func main() {
initial := new(big.Int)
initial.SetString("-42", 10)
value, _ := new(big.Int).SetString("-42", 10)
var result [2]int64
result[0] = value.Int64()
result[1] = value.Rsh(value, 64).Int64()
leRepresentation := make([]byte, 16)
binary.LittleEndian.PutUint64(leRepresentation[:8], uint64(result[0]))
binary.LittleEndian.PutUint64(leRepresentation[8:], uint64(result[1]))
fmt.Println(leRepresentation)
fmt.Println(result)
reverse := big.NewInt(result[1])
reverse.Lsh(reverse, 64)
reverse.Add(reverse, big.NewInt(result[0]))
fmt.Println(reverse.String())
fmt.Println(initial.String() == reverse.String())
}