2011-10-28 7 views
1

私は整数からバイトを得るためにbitconverter.GetBytesを使うことができます。 しかし、ソート順の内容を比較できる配列が必要です。符号付き整数からソート順バイト配列を得る最も速い方法

これまでのところ

var plusOne = BitConverter.GetBytes(1); 
yields bytes: 0,0,0,1 

var plusOne = BitConverter.GetBytes(2); 
yields bytes: 0,0,0,2 

とても良い:

しかし:ここで奇妙な

var minusOne = BitConverter.GetBytes(-1); 
yields bytes: 255,255,255,255 

何もありません。 しかし、minusOneバイト配列とplusOneバイト配列を比較すると、minusOneバイト配列がplusOne(255> 0)より大きいと言われます。

シフト、xorなどの便利な方法がありますので、Int.Minは0,0,0,0とint.Maxは255,255,255,255を返します。混乱:)

答えて

2

は、単にのような範囲を維持するためにuintにキャストし、現在の値にint.MaxValue + 1を追加して申し訳ありません

は:

var result = BitConverter.GetBytes((uint)((long)input - int.MinValue)); 
+0

私は、このソリューション'unchecked((UINT)(思い付きましたint.MinValue ^(1 << 31)))大きなデータ型に落ちる必要はありません.. –

関連する問題