生成在最小值和最大值之间的加密随机整数。

huangapple go评论87阅读模式
英文:

Generate crypto Random Integer beetwen min, max values

问题

我正在尝试生成一个在最小值和最大值之间的随机数,但是似乎我在这方面迷失了,有什么问题吗?

package main

import (
	"crypto/rand"
	"encoding/binary"
	"fmt"
)

func genRandNum(min, max int8) int {
	var num int8
	binary.Read(rand.Reader, binary.LittleEndian, &num)
	return int(num*(max-min)+min)
}

func main() {
    // 尝试获取一个在-10和10之间的随机数
	fmt.Println(genRandNum(-10,10))
}

你的代码看起来没有明显的错误。它使用crypto/rand包来生成随机数,并使用binary.Read函数将随机数读取到num变量中。然后,它将num变量转换为介于minmax之间的整数,并将其返回。

你遇到了什么问题?是否有任何错误消息或输出?

英文:

I trying to generate a random number beetwen a min value and a max value,
but seems I'm lost with this, what is wrong?

package main

import (
	"crypto/rand"
	"encoding/binary"
	"fmt"
)

func genRandNum(min, max int8) int {
	var num int8
	binary.Read(rand.Reader, binary.LittleEndian, &num)
	return int(num*(max-min)+min)
}

func main() {
    // trying to get a random number beetwen -10 and 10
	fmt.Println(genRandNum(-10,10))
}

答案1

得分: 6

这是翻译好的内容:

func main() {
    fmt.Println(genRandNum(-10, 10))
}

func genRandNum(min, max int64) int64 {
    // 计算我们将使用的最大值
    bg := big.NewInt(max - min)

    // 获取介于0和bg之间的big.Int
    // 在这个例子中是0到20
    n, err := rand.Int(rand.Reader, bg)
    if err != nil {
        panic(err)
    }

    // 将n添加到min以支持传入的范围
    return n.Int64() + min
}

Go play

英文:

How about this

func main() {
    fmt.Println(genRandNum(-10, 10))
}

func genRandNum(min, max int64) int64 {
    // calculate the max we will be using
    bg := big.NewInt(max - min)

    // get big.Int between 0 and bg
    // in this case 0 to 20
    n, err := rand.Int(rand.Reader, bg)
    if err != nil {
	    panic(err)
    }

    // add n to min to support the passed in range
    return n.Int64() + min
}

Go play

huangapple
  • 本文由 发表于 2014年10月2日 10:02:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/26153441.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定