2010-08-30 16 views
8

मेरे पास कुछ निम्न स्तर की छवि/बनावट संचालन है जहां 32-बिट रंग UInt32 या int के रूप में संग्रहीत किए जाते हैं और मुझे दोनों के बीच वास्तव में तेज़ बिटवाइड रूपांतरण की आवश्यकता होती है।intnt को UInt32 bitwise में डालने का सबसे तेज़ तरीका?

उदा

int color = -2451337; 

//exception 
UInt32 cu = (UInt32)color; 

कोई विचार?

धन्यवाद और का संबंध

उत्तर

21
int color = -2451337; 
unchecked { 
    uint color2 = (uint)color; 
    // color2 = 4292515959 
} 
+0

अच्छा! बस मैं क्या देख रहा था .. धन्यवाद !! – thalm

7
BitConverter.ToUInt32(BitConverter.GetBytes(-2451337), 0) 
+2

+1 डाउनवॉट ऑफ़सेट करने के लिए +1। मेरे संपादन से पहले भी इस जवाब के साथ महत्वपूर्ण महत्व के कुछ भी गलत नहीं था। असल में, यह VB का उपयोग करते हुए पसंदीदा तरीका होगा क्योंकि प्रत्यक्ष से इंट 32 से UInt32 तक और दानेदार अनचेक संदर्भों की अनुमति नहीं है। –

+0

यह UiValue = CUInt (IntValue & 0xFFFFFFFF &) जैसी किसी चीज़ के प्रदर्शन में तुलना कैसे करता है? – supercat

0

वीबी, जो रूपांतरण के दौरान अतिप्रवाह चेकों को अक्षम करने का एक बहुत सुविधाजनक तरीका नहीं है, की तरह एक भाषा का प्रयोग कर की तरह कुछ इस्तेमाल कर सकते हैं जो:

 
    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 
बिट्स के लिए

संस्करण बहुत समान होंगे। मुझे यकीन नहीं है कि कौन सा दृष्टिकोण तेज होगा। बदलाव थोड़ा मूर्ख हैं, लेकिन वे 'अगर' परीक्षणों की आवश्यकता से बचते हैं।

संबंधित मुद्दे