2011-07-12 11 views
0

これまでのC#でincrementSingカウンタを開発する必要があります。私はGUIDをlongに変換することを考えています。それはCで可能ですか?ますます増加するカウンターを開発する他の方法はありますか?GUIDをlongに変換する

+0

なぜカウンターが必要な場合、GUIDをlongに変換したいのですか? – Tigran

+9

私はあなたがこれのGUIDを必要としないので、私は質問を理解するとは思わない。カウンタが必要な場合は、 'long Counter = 0;'を使用して、 'long x = Counter;'を使用する必要がある場合は '++ Counter 'を呼び出すことができます。なぜそれをGUIDとして必要とするのかを明確にすることはできますか? – shelleybutterfly

+1

とにかくGUIDの人は誰ですか? – BoltClock

答えて

12

いいえ、GUIDは128ビットなので、64ビットなので長時間は収まりません。 A System.Decimalは128ビットなので、長い道のりが得られますが、もちろんその限界もあります。たとえ文字列にカウンタを保存しても、それには限界があります。コンピュータalswaysには限界がありますので、あなたはしばらくの間続けることができるように十分大きなものを見つけなければなりません。

編集:.NET 4.0では

かなり大きなものとなり、それがメモリに収まる必要があるためでもそれは限界がある、覚えることができるBigIntegerがあります。

9

このようなものを試すことができます。

byte[] gb = Guid.NewGuid().ToByteArray(); 
int i = BitConverter.ToInt32(gb,0); 

long l = BitConverter.ToInt64(gb,0); 

非常に安全な場合は確信しています。 :p

+0

私はそれがないと確信しています。しかし、セキュリティは要求事項として言及されていないので重要ではありません。 – sehe

+3

これは配列の先頭バイトを取ります。その結果、*与えられたGUIDと同じように一意でない結果になります* !!!!!! !! (これにはさらに感嘆符が必要です) –

+0

あなたのGUIDに索引を置くのは楽しいです!!!!!!!!!!!!!! – DeadlyChambers

1

問題は、GUIDのセットがすべての整数の精度よりはるかに優れているということです。だから本当にあなたは選択の基数を大幅に縮小しています。これを行うには理由がありません。

数字を増やしても心配する必要がない場合は、数字が大きいライブラリIntXがあります。あなたの番号ジェネレータのローカル状態をファイルまたはメモリに格納することができます。

3

GUIDは128ビットの整数です。 longは符号付き64ビット整数です。 ulongは0〜18,446,744,073,709,551,615の値を持つことができます。それで十分ですか?または小数点を使用したいですか?

+0

[__m128i](http://msdn.microsoft.com/en-us/library/26232t5c.aspx)... – sehe

関連する問題