32ビットカラーがUInt32またはintとして格納される低レベルの画像/テクスチャ操作があり、2つの間のビット単位の変換が非常に高速である必要があります。
例えば
int color = -2451337;
//exception
UInt32 cu = (UInt32)color;
何か案は?
ありがとう、よろしく
int color = -2451337;
unchecked {
uint color2 = (uint)color;
// color2 = 4292515959
}
BitConverter.ToUInt32(BitConverter.GetBytes(-2451337), 0)
変換中にオーバーフローチェックを無効にする便利な方法がないVBのような言語を使用している場合は、次のようなものを使用できます。
共有関数unsToSign64(ByVal val As UInt64)As Int64 If(val And&H8000000000000000UL)0 Then Return CLng(val Xor&H8000000000000000UL)Xor&H8000000000000000 Else Return CLng(val) 終了機能 共有関数signToUns64(ByVal val As Int64)As UInt64 If val <0 Then Return CULng(val Xor&H8000000000000000)Xor&H8000000000000000UL Else Return CULng(val) 終了機能
また
共有関数unsToSign(ByVal val As UInt64)As Int64 CLng(val And&H7FFFFFFFFFFFFFFFUL)+(CLng(-((val And&H8000000000000000UL)>> 1))<< 1)を返します 終了機能 共有関数signToUns(ByVal val As Int64)As UInt64 CULng(val And&H7FFFFFFFFFFFFFFF)+(CULng(-((val And&H8000000000000000)>> 1))<< 1)を返します 終了機能
32ビットのバージョンは非常に似ています。どちらのアプローチが速いかわかりません。シフトは少しばかげていますが、「if」テストの必要性を回避します。