首页 新闻 会员 周边

大家看过来,C#中的随机数产生问题

0
悬赏园豆:20 [已解决问题] 解决于 2017-11-09 23:11

有如下C#代码:

        public static string GuidToString()
        {
            long i = 1;
            foreach (byte b in Guid.NewGuid().ToByteArray())
                i *= ((int)b + 1);
            return string.Format("{0:x}", i - DateTime.Now.Ticks);
        }

请问产生的字符串是几位的。

本人菜鸟,如果大家给出答案,还望说明细节。谢谢。

C#
HDWK的主页 HDWK | 初学一级 | 园豆:152
提问于:2017-11-08 12:14
< >
分享
最佳答案
0

不一定12

收获园豆:20
吴瑞祥 | 高人七级 |园豆:29449 | 2017-11-08 13:07

?

HDWK | 园豆:152 (初学一级) | 2017-11-08 13:48

@HDWK: return string.Format("{0:x}", i - DateTime.Now.Ticks);

输出的字符串长度是不确定的.因为i的大小是不确定的

吴瑞祥 | 园豆:29449 (高人七级) | 2017-11-08 14:53
其他回答(1)
0

大部分都是是16位,但是位数不会很少,因为DateTime.Now.Ticks就会产生一个很大的数,

foreach (byte b in Guid.NewGuid().ToByteArray())
                i *= ((int)b + 1);

这个循环,在我测试的时候,每次测试这个循环产生的数字,结果几乎都超过long的范围。

这个循环产生的字符串,可以用来作为随机字符串。

HDWK | 园豆:152 (初学一级) | 2017-11-08 18:07

如果这个地方有可能超过long范围那你这个地方就不能这样用啊,除非你显式指定unchecked否则c#会因为溢出报错的。

我只是好奇你这里为什么这里要用这么怪的姿势生成随机字符串?

支持(0) 反对(0) Daniel Cai | 园豆:10424 (专家六级) | 2017-11-08 18:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册