2009-04-27 9 views
5

मैं सीरियल पोर्ट का उपयोग कर किसी अन्य सिस्टम से डेटा पढ़ रहा हूं। मैं 133 बाइट्स के पैकेट पढ़ रहा हूं। दूसरा बाइट पैकेट नंबर है और तीसरा बाइट पैकेट नंबर का नकारात्मक मान है।जावा में नकारात्मक बाइट मानों को कैसे पढ़ा जाए -128

समस्या

उस प्रकार byte -128 127 की एक सीमा जब मैं (बाइट की सीमा के बाहर) -129 को पढ़ने के लिए प्रयास के रूप में 127.

मुझे क्या करना चाहिए मूल्य दे देंगे है तो मैं -12 9 मिल सकता है?

उत्तर

6

आपको 127 मिल रहे हैं क्योंकि बाइट केवल 8 बिट्स है और इसलिए मूल्य चारों ओर लपेट रहा है। -12 9 एक जावा बाइट में फिट नहीं होगा। कम से कम शॉर्ट्स का उपयोग करने के लिए आपको अपने प्रोग्राम को संशोधित करना होगा यदि आप किसी दिए गए चर में -12 9 फिट करना चाहते हैं।

+0

(int) (बाइटवेल और 0xFF) यह 128 के बाद सही मान वापस करेगा, यानी -128 128 के रूप में, लेकिन मुझे नग्न मूल्य –

+0

के लिए नहीं मिल रहा है, ठीक है, सुनिश्चित करें। एक बाइट किसी भी 256 मूल्यों की एक श्रृंखला हो सकती है। यदि आप जानते हैं कि बाइट शून्य या अधिक होने वाला है, तो यह 0 से 255 तक कहीं भी हो सकता है। "बाइटवेल और 0xFF" कहकर, आप संकलक को कम या ज्यादा बता रहे हैं कि यह एक हस्ताक्षरित पूर्णांक है, जिसका अर्थ है कि सबसे कम संख्या शून्य है क्या आप कह रहे हैं कि आपके पास बाइट वैल्यू है जो अग्रिम में नकारात्मक होने के लिए जाना जाता है? –

8

आपको यह निर्धारित करना होगा कि आप बाइट मानों की अपेक्षा किस सीमा से करते हैं। यदि आप श्रेणी -12 9 से 126 की अपेक्षा करते हैं तो उदाहरण के लिए आप इसका उपयोग कर सकते हैं।

int min = 129; 
int i = ((b + min) & 0xFF) - min; 

बीटीडब्ल्यू आपके पास 256 से अधिक मूल्य नहीं हो सकते हैं।

4

मुझे यहां थोड़ा अनुमान लगाना है क्योंकि मुझे प्रोटोकॉल नहीं पता है।

शायद दोनों मानों को प्रोटोकॉल में 0 हस्ताक्षर किए गए (सकारात्मक) बाइट्स के रूप में माना जाना चाहिए, वे उन्हें बाद में इनट्स में परिवर्तित कर सकते हैं।

// 0-255 
int plus = (int)(plusByte & 0xFF); 

// -255 - 0 
int minus = 0 - (int)(minusByte & 0xFF); 

क्या यह Us Pat 6313763 से संबंधित है? लेकिन चूंकि पैकेट की लंबाई तय हो गई है, मुझे यह नहीं मिला।

बाइट में 256 की सीमा से "बड़ी" संख्याओं को स्टोर करना संभव नहीं है। हो सकता है कि आपने प्रोटोकॉल को गलत समझा, और उसके दो बाइट्स में संग्रहीत int की उच्च और निम्न बिट्स?

1

-128 से कम मूल्य एक हस्ताक्षरित बाइट में फिट नहीं है। आपको एक छोटा सा आदि पढ़ने की आवश्यकता है

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