使用随机字节生成器生成随机int

时间:2014-04-08 13:08:34

标签: c#

我使用随机生成器,它将随机字节的长度作为输入并返回字节数组。我现在需要的是将该字节数组转换为8位整数,并从那里转换为字符串。

byte[] randomData = this.GetRandomArray(4);
SecretCode = Math.Abs(BitConverter.ToInt32(randomData, 0)).ToString().Substring(0, 7);

但是在某些情况下,int短于8位且我的方法失败了。如何确保生成的字节数组可以转换为8 digi int number?

4 个答案:

答案 0 :(得分:1)

您可以使用<stringCode>.PadLeft(8, "0")

答案 1 :(得分:1)

还有一个选择:

myString = BitConverter.ToUInt32(randomData, 0).toString("D8");

注意 - using ToUInt32是一种比转换为有符号整数并获取绝对值更为明智的方法(它也会使-123123之后可生成的值的数量加倍在不同的字符串输出中,如果使用Math.Abs,则不会输出。);格式"D8"应转换为八位数,包括前导零。

请参阅https://stackoverflow.com/a/5418425/1967396

答案 2 :(得分:0)

您确定Substring上的方法失败了吗?据我所知,有很多问题:

  1. 如果你没有得到4个字节(BitConverter.ToInt32上的ArgumentException)
  2. 它将会失败
  3. 如果字符串不够长(上面的问题),它将会失败
  4. 它会截断七个字符,而不是八个,如你所愿。
  5. 您可以使用PadLeft功能填充零。如果想要8,那么代码应该如下:

    var s = Math.Abs(
               BitConverter.ToInt32(randomData, 0))
                   .ToString()
                   .PadLeft(8, '0')
                   .Substring(0, 8);
    

    对于七,请将8替换为7

答案 3 :(得分:0)

在尝试获取Substring()之前,需要连接8个零,然后取最后8个字符。

StringBuffer s = new StringBuffer("00000000").append(Math.Abs(BitConverter.ToInt32(randomData, 0)).ToString());
SecretCode = s.substring(s.length()-7);

您的另一个选择是使用格式化程序来确保位的字符串化返回前导零。