2010-08-18 8 views
41

संकलक यह आपके लिए ठीक हो रहा है (एकल अंक हेक्स मान केवल):हेक्स नोटेशन का उपयोग करके बाइट [] सरणी के लिए शाब्दिक सिंटेक्स ..?

byte[] rawbytes={0xa, 0x2, 0xf}; 

लेकिन यह नहीं:

byte[] rawbytes={0xa, 0x2, 0xff}; 

मैं एक "प्रेसिजन के संभावित नुकसान पाया मिलती है: int आवश्यक: बाइट "त्रुटि?

मैं क्या गलत कर रहा हूं - या एकल अंक हेक्स संख्या एक विशेष मामला है?

जावा 1.5.x.

उत्तर

41

जैसा कि दूसरे ने उत्तर दिया है, बाइट जावा में एक हस्ताक्षरित प्रकार है। रेंज -128 से 127 समावेशी है। तो 0xff बराबर -0x01 है। आप 0xff -0x01 के बजाय उपयोग करें यदि आप एक मैनुअल डाली जोड़ सकते हैं:

byte[] rawbytes={0xa, 0x2, (byte) 0xff}; 
7

byte हस्ताक्षरित है और 0xff = 255 बहुत बड़ा है। वैध सीमा है (-128 .. 127)।

उदाहरण कोड:

public static void main(String[] args) { 
    byte b = (byte) 0xff; // = -1 
    int i = b;    // = -1 
    int j = b & 0xff;  // = 255 

    System.out.printf("b=%s, i=%s, j=%s", b,i,j); 
} 
8

"0xFF" एक int दशमलव मान 255 है, जो एक बाइट के रूप में प्रदर्शनीय नहीं है के लिए शाब्दिक है। y

byte[] rawbytes = { 0xA, 0x2, (byte) 0xFF }; 

यह एक नया बाइट शाब्दिक वाक्य रचना को जोड़ने के लिए प्रस्तावित किया गया था (या:

अभी के लिए, यदि आप एक byte करने के लिए इसे कास्ट करने के लिए संकलक तुम सच मतलब -1 बताने के लिए इस तरह, की आवश्यकता होगी Y प्रत्यय) Java 7. को तो फिर तुम लिखने में सक्षम होता है:

byte[] rawbytes = { 0xA, 0x2, 0xFFy }; 

हालांकि, इस प्रस्ताव में शामिल नहीं किया गया था "अभिन्न शाब्दिक सुधार के लिए सर्वग्राही प्रस्ताव," इसलिए हम कलाकारों के साथ हमेशा के लिए फंस गया।

+7

'y' प्रत्यय यह जावा 7 रिलीज करने के लिए नहीं किया। कृपया उस भाग को हटा दें ताकि वह पाठकों को भ्रमित न करे। – Natix

12

चर तर्क साथ एक सहायक समारोह की घोषणा के द्वारा एक और संभावना नहीं है। यदि आपको एकाधिक बाइट एरे घोषित करने की आवश्यकता है तो यह बेहतर हो सकता है।

उदाहरण कोड

public static byte[] toBytes(int... ints) { // helper function 
    byte[] result = new byte[ints.length]; 
    for (int i = 0; i < ints.length; i++) { 
     result[i] = (byte) ints[i]; 
    } 
    return result; 
} 

public static void main(String... args) { 

    byte[] rawbytes = toBytes(0xff, 0xfe); // using the helper 

    for (int i = 0; i < rawbytes.length; i++) { 
     System.out.println(rawbytes[i]); // show it works 
    } 
} 
संबंधित मुद्दे