मेरे पास uint8(हस्ताक्षर 8 बिट पूर्णांक) एक यूडीपी पैकेट से आ रहा है। जावा केवल हस्ताक्षरित प्राइमेटिव का उपयोग करता है। मैं इस डेटा संरचना को जावा के साथ सही तरीके से कैसे पार्स करूं?जावा जावा में uint8 कैसे पार्स करें?
उत्तर
बस इसे बाइट के रूप में पढ़ें और फिर एक int में कनवर्ट करें।
byte in = udppacket.getByte(0); // whatever goes here
int uint8 = in & 0xFF;
bitmask की जरूरत है, क्योंकि अन्यथा, के लिए 1 एक नकारात्मक पूर्णांक में परिवर्तित हो जाएगा बिट 8 सेट के साथ महत्व देता है। उदाहरण:
This: 10000000
Will result in: 11111111111111111111111110000000
तो जब आप बाद में इसे करने के लिए bitmask 0xFF लागू होते हैं, अग्रणी 1 के बाहर रद्द कर दिया जा रहा है। आपकी जानकारी के लिए: 0xFF == 0b11111111
धन्यवाद, यह बहुत जानकारीपूर्ण था। मैं आपकी प्रतिक्रिया की सराहना करता हूं – stackoverflow
धन्यवाद! बहुत सराहना की – milosmns
0xFF & number
संख्या को बिना हस्ताक्षरित बाइट के रूप में मानेंगे। लेकिन उसके एवज प्रकार int
आप 8 बिट एक byte
में आप वास्तव में इसे एक अहस्ताक्षरित मूल्य के लिए परिवर्तित करने की आवश्यकता है (और अक्सर तुम नहीं) यदि आप स्टोर कर सकते हैं एक मुखौटा
byte b = ...
int u = b & 0xFF; // unsigned 0 .. 255 value
का उपयोग कर सकते है
int value = eightBits & 0xff;
&
ऑपरेटर (जावा में सभी पूर्णांक ऑपरेटरों की तरह) एक int
अप करने के लिए-डाले eightBits
(साइन-विस्तार पर हस्ताक्षर थोड़ा करके): आप कुछ इस तरह कर सकते हैं। चूंकि इससे 0x7f से अधिक मान int
मानों में बदल जाएंगे, तो आपको सबसे कम 8 बिट्स के अलावा सभी को मुखौटा करना होगा।
आप इसे short
या int
में पार्स कर सकते हैं, जिसमें एक हस्ताक्षरित बाइट के सभी मान रखने के लिए पर्याप्त सीमा है।
क्या आपका मतलब ** uint8 ** है? – SLaks