2012-12-28 16 views
7

मेरे पास uint8(हस्ताक्षर 8 बिट पूर्णांक) एक यूडीपी पैकेट से आ रहा है। जावा केवल हस्ताक्षरित प्राइमेटिव का उपयोग करता है। मैं इस डेटा संरचना को जावा के साथ सही तरीके से कैसे पार्स करूं?जावा जावा में uint8 कैसे पार्स करें?

+2

क्या आपका मतलब ** uint8 ** है? – SLaks

उत्तर

13

बस इसे बाइट के रूप में पढ़ें और फिर एक 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

+0

धन्यवाद, यह बहुत जानकारीपूर्ण था। मैं आपकी प्रतिक्रिया की सराहना करता हूं – stackoverflow

+0

धन्यवाद! बहुत सराहना की – milosmns

3

0xFF & number संख्या को बिना हस्ताक्षरित बाइट के रूप में मानेंगे। लेकिन उसके एवज प्रकार int

3

आप 8 बिट एक byte में आप वास्तव में इसे एक अहस्ताक्षरित मूल्य के लिए परिवर्तित करने की आवश्यकता है (और अक्सर तुम नहीं) यदि आप स्टोर कर सकते हैं एक मुखौटा

byte b = ... 
int u = b & 0xFF; // unsigned 0 .. 255 value 
2

का उपयोग कर सकते है

int value = eightBits & 0xff; 

& ऑपरेटर (जावा में सभी पूर्णांक ऑपरेटरों की तरह) एक int अप करने के लिए-डाले eightBits (साइन-विस्तार पर हस्ताक्षर थोड़ा करके): आप कुछ इस तरह कर सकते हैं। चूंकि इससे 0x7f से अधिक मान int मानों में बदल जाएंगे, तो आपको सबसे कम 8 बिट्स के अलावा सभी को मुखौटा करना होगा।

1

आप इसे short या int में पार्स कर सकते हैं, जिसमें एक हस्ताक्षरित बाइट के सभी मान रखने के लिए पर्याप्त सीमा है।

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