2012-12-21 19 views
24

Günlüğe kaydetme amacıyla diğer bazı çocuklar günlükleri bayt dizisine ve onaltılık dizeye dönüştürür. Ama geri java dize içinde ölmek istiyorum, ama bunu yapmak mümkün değildiOnaltılık dize java dizesine dönüştürme

günlük dosyasında altıgen dize

fd00000aa8660b5b010006acdc0100000101000100010000 

gibi bir şey kimse plz bunu deşifre yardımcı olabilir görünüyor?

byte b = Byte.parseByte(str, 16); 

ve sonra String Oluşturucu kullanın: Peşin

Teşekkür .. verilerde okunan tüm

+7

bunun nedeninin daha cevaplar almak yardımcı olacağız. –

+1

Daha önce herhangi bir araştırma/çaba göstermediğim için size bir oylama verdim. –

cevap

5

Birincisi, daha sonra bayt dizisi dönüştürmek

new String(byte[] bytes) 

veya eğer karakter kümesi sistem varsayılanı değil:

new String(byte[] bytes, String charsetName) 
Apache Commons içinde kullanılması
+0

Elbette, "diğer bazı kişiler" tarafından kullanılan kodlamaya bağlı olarak çalışmayabilir veya çalışmayabilir. Belki de Latin-9 kullanıyorlardı. Veya UTF-8. Ya da EUC-JP. Ya da belki Big-Endian'daydı. Kim bilir? –

+0

Bu yüzden, log dizeleri tarafından hex dizgisine dönüştürmeden önce kullanılan kodlamayı belirtmelisiniz. –

+1

, onaltılık bir sayıyı ayrıştırmak için 'Byte.parseByte (str, 16); – gogognome

38

Hex: sadece kod çözme yöntemi tarafından döndürülen byte [] ile yeni bir dize oluşturmak

public static byte[] decode(String hex){ 

     String[] list=hex.split("(?<=\\G.{2})"); 
     ByteBuffer buffer= ByteBuffer.allocate(list.length); 
     System.out.println(list.length); 
     for(String str: list) 
      buffer.put(Byte.parseByte(str,16)); 

     return buffer.array(); 

} 

String dönüştürmek için:

String hexString = "fd00000aa8660b5b010006acdc0100000101000100010000";  
byte[] bytes = Hex.decodeHex(hexString.toCharArray()); 
System.out.println(new String(bytes, "UTF-8")); 
3

Aşağıdaki kodu deneyin. java dizeye altıgen dize dönüştürmek için

+0

yapıyor, Byte.parseByte (byte) Integer.parseInteger değişti,> 128 ayrıştırmak için izin vermek için. – domenukk

+0

@domenukk bu Integer.parseInt (..) değil Integer.parseInteger (..). Byte.parseByte aşağıdaki {return (byte) Tamsayı olarak uygulandı.parseInt (Str, taban);} – Error

+0

@Munene thanx 4 regex – Error

18
byte[] bytes = DatatypeConverter.parseHexBinary(hexString); 
String result= new String(bytes, encoding); 
+1

"DatatypeConverter" öğesini nerede bulabilirim? – zundi

+2

https://docs.oracle.com/javase/7/docs/api/javax/xml/bind/DatatypeConverter.html – telebog

2

Bir başka yol:

public static String unHex(String arg) {   

    String str = ""; 
    for(int i=0;i<arg.length();i+=2) 
    { 
     String s = arg.substring(i, (i + 2)); 
     int decimal = Integer.parseInt(s, 16); 
     str = str + (char) decimal; 
    }  
    return str; 
} 
+0

Birçok alt dizin oluşturuluyor. Uygun değil. – Jonathan

3

Sen String as UTF-8(?) için byte array için String (hex) dan gidebilir. Altıgen dizenizin önde gelen boşluklara ve malzemesine sahip olmadığından emin olun.

public static byte[] hexStringToByteArray(String hex) { 
    int l = hex.length(); 
    byte[] data = new byte[l/2]; 
    for (int i = 0; i < l; i += 2) { 
     data[i/2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4) 
          + Character.digit(hex.charAt(i+1), 16)); 
    } 
    return data; 
} 

Kullanımı: Sen cevap olarak bazı sorulara işaretlemek için başlamalıdır

String b = "0xfd00000aa8660b5b010006acdc0100000101000100010000"; 
byte[] bytes = hexStringToByteArray(b); 
String st = new String(bytes,StandardCharsets.UTF_8); 
System.out.println(st); 
+0

kitkat'ın altındaki sürümler için nasıl kullanılır? –