有如下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);
}
请问产生的字符串是几位的。
本人菜鸟,如果大家给出答案,还望说明细节。谢谢。
不一定12
?
@HDWK: return string.Format("{0:x}", i - DateTime.Now.Ticks);
输出的字符串长度是不确定的.因为i的大小是不确定的
大部分都是是16位,但是位数不会很少,因为DateTime.Now.Ticks就会产生一个很大的数,
foreach (byte b in Guid.NewGuid().ToByteArray())
i *= ((int)b + 1);
这个循环,在我测试的时候,每次测试这个循环产生的数字,结果几乎都超过long的范围。
这个循环产生的字符串,可以用来作为随机字符串。
如果这个地方有可能超过long范围那你这个地方就不能这样用啊,除非你显式指定unchecked否则c#会因为溢出报错的。
我只是好奇你这里为什么这里要用这么怪的姿势生成随机字符串?