我需要在C#中开发一个不断增加的计数器。我正在考虑将GUID转换为long。这可能在c#中吗?有没有其他方法可以开发一个不断增加的计数器?
答案 0 :(得分:13)
不,GUID是128位,所以不会适合你的长期,因为那是64位。 System.Decimal是128位,所以会让你走很远的路,但当然这也有它的限制。即使您将计数器保存在字符串中也有其限制。计算机也有限制,你必须找到一个足够大的计算机以便你可以继续使用一段时间。
编辑:
在.Net 4.0中有一个BigInteger可能相当大,但请记住,即使它有其限制,因为它必须适合内存。
答案 1 :(得分:10)
byte[] gb = Guid.NewGuid().ToByteArray();
int i = BitConverter.ToInt32(gb,0);
long l = BitConverter.ToInt64(gb,0);
我不确定它是否非常安全。 :P
答案 2 :(得分:3)
GUID是128位整数。 long是有符号的64位整数。虽然ulong的值可以是0到18,446,744,073,709,551,615。够了吗?或者你想使用小数?
答案 3 :(得分:1)
问题是GUID的集合远远超过了所有整数长度精度的集合。所以你真的在缩小选择的基数。没有充分的理由这样做。
如果你想继续增加一个数字而不用担心它,那么有一个库IntX可以处理大数字。您可以将数字生成器的本地状态存储在文件或内存中,并且您的数字会不断增加。 (好吧)