2009-03-27 9 views
6

BitConverterを試してみると、バイト配列が必要です.Int32があり、UInt32に変換する必要があります。C#:長い形式をulongに変換する方法

C++では問題ありませんでした。

+0

あなたがここで求めているものは、バディー・ロング、バイト配列、およびintsです。詳しく説明できますか? – Chris

答えて

17

シンプルなキャストが必要です。これを行う精度を失う可能性があるので、変換は明示的です。

long x = 10; 
ulong y = (ulong)x; 
+7

大きなネガでオーバーフローすることはできませんか?代わりに 'unchecked'を使って切り捨てることができます:http://msdn.microsoft.com/en-us/library/a569z7k8(VS.71).aspx –

1

ULONGに長いを変換するには、単にそれをキャスト:それは負の数であれば

long a; 
ulong b = (ulong)a; 

C#が例外をスローしません。

+0

私はこれが負の値を持つ例外をスローするとは信じていませんが、しかし、あなたが期待しているものではありません...ネット(ノートパソコン)を持っていないか、それをテストします。 – Tracker1

+0

これはしませんが、最初のビットは符号ビットの代わりに最上位ビットとして解釈されます。 – DuneCat

+0

それは投げられません。誤解を招く可能性がある場合は、回答を修正することを検討する必要があります。確かに@KFLは – KFL

6

試してみてください。

Convert.ToUInt32() 
1
Int32 i = 17; 
UInt32 j = (UInt32)i; 

EDIT:質問はあなたが長いか、int型を持っているかどうかは不明ですか?

+0

ジョンはCやC++で"古い "ロングを指していると思います。 –

+0

質問によるとC#? –

+0

私は彼が習慣からそれを言及したことを意味しました。 –

1

この機能を考える:

string test(long vLong) 
{ 
    ulong vULong = (ulong)vLong; 
    return string.Format("long hex: {0:X}, ulong hex: {1:X}", vLong, vULong); 
} 

そして、この使用方法:

string t1 = test(Int64.MinValue); 
    string t2 = test(Int64.MinValue + 1L); 
    string t3 = test(-1L); 
    string t4 = test(-2L); 

これが結果になります。あなたも、ビットが完全に保存されて見ることができるように

t1 == "long hex: 8000000000000000, ulong hex: 8000000000000000" 
    t2 == "long hex: 8000000000000001, ulong hex: 8000000000000001" 
    t3 == "long hex: FFFFFFFFFFFFFFFF, ulong hex: FFFFFFFFFFFFFFFF" 
    t4 == "long hex: FFFFFFFFFFFFFFFE, ulong hex: FFFFFFFFFFFFFFFE" 

負の値の場合

関連する問題