2013-10-18 7 views
7

मुझे पता है कि आप printf का उपयोग करें और यह भी StringBuilder.append(String.format("%x", byte)) का उपयोग कंसोल पर हेक्स मूल्यों के मूल्यों को बदलने और उन्हें प्रदर्शित करने के लिए कर सकते हैं में हेक्स प्रारूप करने के लिए बाइट सरणी परिवर्तित करने के लिए। लेकिन मैं वास्तव में बाइट सरणी को प्रारूपित करने में सक्षम होना चाहता हूं ताकि प्रत्येक बाइट दशमलव के बजाय हेक्स के रूप में प्रदर्शित हो।कैसे जावा

if(bytes > 0) 
    { 
     byteArray = new byte[bytes]; // Set up array to receive these values. 

     for(int i=0; i<bytes; i++) 
     { 
      byteString = hexSubString(hexString, offSet, CHARSPERBYTE, false); // Isolate digits for a single byte. 
      Log.d("HEXSTRING", byteString); 

      if(byteString.length() > 0) 
      { 
       byteArray[i] = (byte)Integer.parseInt(byteString, 16); // Parse value into binary data array. 
      } 
      else 
      { 
       System.out.println("String is empty!"); 
      } 

      offSet += CHARSPERBYTE; // Set up for next word hex.  
     } 

     StringBuilder sb = new StringBuilder(); 
     for(byte b : byteArray) 
     { 
      sb.append(String.format("%x", b)); 
     } 

     byte subSystem = byteArray[0]; 
     byte highLevel = byteArray[1]; 
     byte lowLevel = byteArray[2]; 

     System.out.println("Byte array size: " + byteArray.length); 
     System.out.printf("Byte 1: " + "%x", subSystem); 
     System.out.printf("Byte 2: " + "%x", highLevel); 
     System.out.println("Byte 3: " + lowLevel); 
     System.out.println("Byte array value: " + Arrays.toString(byteArray)); 
     System.out.println("Byte array values as HEX: " + sb.toString()); 
    } 
    else 
    { 
     byteArray = new byte[0]; // No hex data. 

     //throw new HexException(); 
    } 

    return byteArray; 

स्ट्रिंग कि बाइट सरणी में विभाजित किया गया था:

यहाँ मैं पहले से ही है कि पहले दो तरीके है कि मैं कहा करता है कि मेरे कोड का एक वर्ग है

"1E2021345A2B" 

लेकिन जैसे कंसोल पर दशमलव के रूप में यह प्रदर्शित करता है:

"303233529043" 

किसी को भी कृपया मुझे पर कैसे करने के लिए मदद कर सकते हैं वास्तविक मान हेक्स में होने के लिए प्राप्त करें और स्वाभाविक रूप से उस तरह प्रदर्शित किया जाए। पहले ही, आपका बहुत धन्यवाद।

+0

आप क्यों नहीं बस Integer.parseInt (sb.toString(), 16) कॉल नहीं करते प्रयास करें? – Luke

उत्तर

4

तरह से मैं यह कार्य करें:

private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 
     'B', 'C', 'D', 'E', 'F' }; 

    public static String toHexString(byte[] bytes) { 
    char[] hexChars = new char[bytes.length * 2]; 
    int v; 
    for (int j = 0; j < bytes.length; j++) { 
     v = bytes[j] & 0xFF; 
     hexChars[j * 2] = HEX_CHARS[v >>> 4]; 
     hexChars[j * 2 + 1] = HEX_CHARS[v & 0x0F]; 
    } 
    return new String(hexChars); 
    } 
+0

मैं अभी भी एक बाइट सरणी वापस करना चाहता हूं, हालांकि प्रत्येक बाइट हेक्स पर स्वरूपित किया गया है। जैसे स्ट्रिंग 1 ई थी और बाइट अब दशमलव में 30 है और मैं चाहता हूं कि बाइट को 1E पर स्वरूपित किया जाए। क्या इसे करने का कोई तरीका है? –

+0

इसे दो बाईक्स वर्णों को 'बाइट' का वर्णन करने की आवश्यकता है। यदि आप हेक्स चार के ASCII कोड का उपयोग कर हेक्स चार को एन्कोड करते हैं, तो आप 1 बाइट का उपयोग करके 1 हेक्स वर्णों का प्रतिनिधित्व कर सकते हैं। इसलिए, आपको ASCII में हेक्स में एक बाइट का वर्णन करने के लिए दो बाइट्स की आवश्यकता है। मुझे यकीन नहीं है कि आप वास्तव में क्या चाहते हैं। – Tamas

+0

मैं दो सिंगल बाइट पर कब्जा कर लेना चाहता हूं। तो मेरी उदाहरण के लिए, मैं 6. –

22

आप String javax.xml.bind.DatatypeConverter.printHexBinary(byte[]) उपयोग कर सकते हैं। उदा .:

public static void main(String[] args) { 
    byte[] array = new byte[] { 127, 15, 0 }; 
    String hex = DatatypeConverter.printHexBinary(array); 
    System.out.println(hex); // prints "7F0F00" 
} 
+1

मैं एंड्रॉइड जावा का उपयोग कर रहा हूं और एंड्रॉइड इसका समर्थन नहीं करता है। क्या इसके चारों ओर एक और रास्ता है? –

+2

मुझे मिले किसी अन्य तरीके का सबसे छोटा तरीका। – Alex

+0

वीजीआर का उत्तर एंड्रॉइड पर भी काम करता है और यह बहुत आसान है। – Ethan

16

String.format वास्तव में java.util.Formatter वर्ग का उपयोग करता है। इसके बजाय String.Format सुविधा विधि का उपयोग कर के, सीधे एक फ़ॉर्मेटर का उपयोग करें:

Formatter formatter = new Formatter(); 
for (byte b : bytes) { 
    formatter.format("%02x", b); 
} 
String hex = formatter.toString(); 
+1

यह इस प्रश्न का सबसे छोटा, सरल उत्तर है जिसे मैं खोजने में सक्षम हूं जो गैर-मानक पुस्तकालयों पर भरोसा नहीं करता है। अति उत्तम!!! – Ethan

-1

इस

byte[] raw = some_bytes; 
javax.xml.bind.DatatypeConverter.printHexBinary(raw)