gpt4 book ai didi

type-conversion - 将 big.Int 的最后 8 位放入 uint8

转载 作者:IT王子 更新时间:2023-10-29 01:40:18 25 4
gpt4 key购买 nike

我正在尝试编写一个密码生成器。它要求字符以 ASCII 表示,但我正在尝试使用 crypto/rand。不过,这提供了 big.Int 格式的数字,我需要将相关的低 8 位转换为可在字符串中使用的形式。到目前为止,我已经尝试将 big.Int 转换为 uint8,但没有成功。

有没有好的简单方法来做到这一点?我已经看到涉及使用 encoding/binaryint64 转换为 [8]uint8 的答案,但这些对于我的目的来说似乎不必要地复杂。任何指导都将不胜感激:)。

最佳答案

package main

import (
"fmt"
"math/big"
)

func main() {
mpInt := big.NewInt(0x123456789abcdef0)
b := byte(mpInt.Int64())
fmt.Printf("%02x", b)
}

f0

在行动:http://play.golang.org/p/92PbLdiVsP


编辑:Evan Shaw 在下面的评论中正确地指出,对于 int64 限制之外的大整数,上述代码实际上是不正确的。与其从 big.Bytes 中提取它(它复制了代表 big.Int IIRC 的所有位),不如使用 big 性能更高。和:


package main

import (
"fmt"
"log"
"math/big"
)

func lsB(n *big.Int) byte {
var m big.Int
return byte(m.And(m.SetInt64(255), n).Int64())
}

func main() {
var mpInt big.Int
if _, ok := mpInt.SetString("0x123456789abcdef012342", 0); !ok {
log.Fatal()
}

fmt.Printf("%02x", lsB(&mpInt))
}

Playground :http://play.golang.org/p/pgkGEFgb8-

关于type-conversion - 将 big.Int 的最后 8 位放入 uint8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12653340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com