【问题标题】:Random number generator with hexadecimal seed具有十六进制种子的随机数生成器
【发布时间】:2018-06-23 09:21:00
【问题描述】:

我想制作一个随机数生成器,允许用户以字符串的形式提供十六进制种子值。我正在使用 C#。

我希望拥有尽可能多的有效种子。

Random 类允许我们用一个有符号整数作为种子。我可以轻松地将正值转换为十六进制,但是负值呢?有符号整数的最大大小为 7FFFFFFF(十六进制)。我的理想解决方案将允许我将整个有效数字范围作为有符号整数,并为每个数字设置相应的十六进制值。

基本上,我需要 2 个函数将给定的有符号整数转换为相应的十六进制值,反之亦然。

我最初的想法是取任何小于 0 的 int,用有符号 int 的最大值创建一个 unsigned int,然后加上小于 0 的 int 的绝对值。现在你有一个连续的整数值的范围。将其转换为十六进制,您就有了十六进制值。谁能戳破我的逻辑?

【问题讨论】:

  • 我不太明白这个问题 - 您是在问如何将基于 10 的负“常规”int 值转换为十六进制值?
  • ...allows the user to provide a hexadecimal seed 这可能是个坏主意——用户倾向于输入相同的数字,因此结果不是那么随机。同样convert a signed int to a hex value 的值是相同的 - 十六进制只是一个 representation
  • Essentially, i need 2 functions that convert a given signed int to a corresponding hex value and vice versa. 为什么不提出这个问题,因为这个问题与生成随机数无关?

标签: c# hex


【解决方案1】:

实际上没有什么可以在负整数和十六进制之间转换。

class Program
{
    static void Main(string[] args)
    {
        int value = -73651221;
        Console.WriteLine($"Int: {value}");
        var hex = value.ToString("X");
        Console.WriteLine($"Hex: {hex}");
        Console.WriteLine($"Int again: {int.Parse(hex, System.Globalization.NumberStyles.HexNumber)}");
        Console.Read();
    }
}

提供输出:

Int: -73651221
Hex: FB9C2BEB
Int again: -73651221

【讨论】:

    猜你喜欢
    • 2011-12-29
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 2015-10-07
    • 2013-09-14
    • 2016-02-04
    • 1970-01-01
    相关资源
    最近更新 更多