2016-12-12 14 views
5

के लिए एक में संलग्न कोड ब्लॉक बारे में मैं कैसे पाश के लिए एक सरल में कोड निम्नलिखित लिख सकता हूँ करने के लिए:,कैसे पाश

int asInt = (valueAsBytes[3] & 0xFF) 
       | ((valueAsBytes[2] & 0xFF) << 8) 
       | ((valueAsBytes[1] & 0xFF) << 16) 
       | ((valueAsBytes[0] & 0xFF) << 24); 
+1

ईरान ने सही जवाब दिया, लेकिन मुझे लगता है कि मुझे लगता है कि (व्यक्तिगत राय!) यह समयपूर्व अनुकूलन होगा। वह कोड पठनीय है और यदि यह काम करता है, तो मुझे नहीं लगता कि आप इसे फॉर-लूप के साथ क्यों बदलना चाहते हैं। – Fildor

+1

मैं सिर्फ –

उत्तर

5

ध्यान दें कि सरणी सूचकांक valueAsBytes करने के लिए प्रत्येक पहुँच में 1 से कम हो जाती है, जबकि दूसरे संकार्य शिफ्ट ऑपरेटर 8:

int asInt = 0; 
for (int i = valueAsBytes.length-1; i >= 0; i--) 
    asInt |= valueAsBytes[i] & 0xFF << (valueAsBytes.length-i)*8; 
+0

सामान्यीकृत करना चाहता था धन्यवाद एरान ने काम किया !! –

2

क्या मैं एक अलग समाधान सुझा सकता हूं?

मुझे लगता है कि एक लूप इस कोड में कोई "स्पष्टता" नहीं जोड़ता है। असली मुद्दा यह है कि आप कोड को डुप्लिकेट कर रहे हैं (valueAsBytes [i] & 0xFF) चार बार। साथ

private final int maskIndexedValueAndShiftBy(int index, int shifter) { 
    return (valueAsBytes[index] & 0xFF) << shifter; 

पाश बस पूरे गणना कठिन समझने के लिए बनाता है

int asInt = maskIndexedValueAndShiftBy(3, 0) | maskIndexedValueAndShiftBy(2, 8) | ... 

: बिल्कुल हैं, तो आप की तरह कुछ कर सकता है।