最快的方式投INT到UInt32的按位?
题
我有其中32位的颜色被存储为UInt32的或者int一些低级别图像/纹理操作,我需要两者之间的非常快逐位转换。
e.g。
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一样,语言不具有转换期间禁止溢出检查的一个非常方便的方式,可以使用类似:
Shared Function unsToSign64(ByVal val As UInt64) As Int64 If (val And &H8000000000000000UL) 0 Then Return CLng(val Xor &H8000000000000000UL) Xor &H8000000000000000 Else Return CLng(val) End Function Shared Function signToUns64(ByVal val As Int64) As UInt64 If val < 0 Then Return CULng(val Xor &H8000000000000000) Xor &H8000000000000000UL Else Return CULng(val) End Function
或
Shared Function unsToSign(ByVal val As UInt64) As Int64 Return CLng(val And &H7FFFFFFFFFFFFFFFUL) + (CLng(-((val And &H8000000000000000UL) >> 1)) << 1) End Function Shared Function signToUns(ByVal val As Int64) As UInt64 Return CULng(val And &H7FFFFFFFFFFFFFFF) + (CULng(-((val And &H8000000000000000) >> 1)) << 1) End Function
有32位版本将是非常相似的。我不知道哪种方法会更快。的移位是愚蠢一点,但它们避免需要“如果”测试。
不隶属于 StackOverflow