2012-02-04 17 views
5

मैं एक खुला स्रोत कोड का अध्ययन कर रहा है, जहां निम्न पंक्तिchar से byte को परिवर्तित करने के लिए कैसे?

stringBytes[i] = (byte) (stringChars[i] & 0x00FF); 

कोई व्याख्या कर सकते हैं क्या वास्तव में इस लाइन में हो रहा है भर में आया था ???

+2

'0x00FF' अनावश्यक है। –

उत्तर

9

चार में जावा में 2 बाइट होते हैं और निश्चित रूप से बाइट एकल बाइट होता है।

तो यह ऑपरेशन में

:

stringBytes[i] = (byte) stringChars[i] & 0x00FF 

एक चार मूल्य (16 बिट) किया जा रहा है संख्या 0x00FF के साथ द्विआधारी anded (बाइनरी: 0000 0000 1111 1111) यह एक बाइट बनाने के लिए।

8 0s and 8 1s के साथ बाइनरी एंडिंग द्वारा आप मूल रूप से 8 मूल्यों को छोड़कर मुख्य मूल्य के सबसे बाएं या सबसे महत्वपूर्ण बिट्स (एमएसबी) को मास्क कर रहे हैं, इस प्रकार केवल 8 सही या कम से कम महत्वपूर्ण बिट्स (एलएसबी) बरकरार रहें। फिर कोड (byte) का उपयोग करके बाइट को परिणामस्वरूप मान निर्दिष्ट कर रहा है, जो अन्यथा int मान है।

+1

आप 8 बाएं अधिकांश बिट्स को मास्क कर रहे हैं, और सबसे अधिक बिट्स को सही रखते हुए। ऑपरेटर के साथ, मुखौटा बल के बाएं हिस्से में शून्य शून्य होने का परिणाम होता है। – Tony

+0

धन्यवाद कि एक अच्छा पकड़ था। मैंने इसे अभी सही कर दिया है। – anubhava

2

0x00FF के साथ एंडिंग केवल अंतिम 8 महत्वपूर्ण बिट और शून्य अन्य बिट्स को बरकरार रखता है।

E.g.: 
0xD2A5 & 0x00FF = 1101001010100101 & 0000000011111111 = 0000000010100101 = A5 
+0

मुझे यकीन है कि ए 5 वास्तव में 0xA5 होना चाहिए - बस स्थिरता के लिए। – Chexxor

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