我使用随机生成器,它将随机字节的长度作为输入并返回字节数组。我现在需要的是将该字节数组转换为8位整数,并从那里转换为字符串。
byte[] randomData = this.GetRandomArray(4);
SecretCode = Math.Abs(BitConverter.ToInt32(randomData, 0)).ToString().Substring(0, 7);
但是在某些情况下,int短于8位且我的方法失败了。如何确保生成的字节数组可以转换为8 digi int number?
答案 0 :(得分:1)
您可以使用<stringCode>.PadLeft(8, "0")
答案 1 :(得分:1)
还有一个选择:
myString = BitConverter.ToUInt32(randomData, 0).toString("D8");
注意 - using ToUInt32
是一种比转换为有符号整数并获取绝对值更为明智的方法(它也会使-123
和123
之后可生成的值的数量加倍在不同的字符串输出中,如果使用Math.Abs
,则不会输出。);格式"D8"
应转换为八位数,包括前导零。
答案 2 :(得分:0)
您确定Substring
上的方法失败了吗?据我所知,有很多问题:
BitConverter.ToInt32
上的ArgumentException)您可以使用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);
您的另一个选择是使用格式化程序来确保位的字符串化返回前导零。