2013-03-15 45 views

Trả lời

43

Bạn cần phải nhìn vào String.format()Formatter thông số kỹ thuật.

ví dụ:

String.format("%02x", byteValue);

Duyệt qua mảng và thêm mỗi String.format() kết quả đến một StringBuilder

+1

cảm ơn bạn đã hoạt động! – hiii

+0

Đẹp và đơn giản. Không cần cho tôi sàng lọc qua tường văn bản trên câu hỏi và câu trả lời trùng lặp khác :) – andrei

+1

nó hoạt động, nhưng phải mất khoảng 3 lần so với phương pháp dưới đây dựa trên hoạt động byte – darkled

0

Bạn có thể sử dụng Integer.toStringint i, int radix) để chuyển đổi từng số của bạn thành một chuỗi trong hệ thập lục phân và sau đó ghép chúng lại với nhau. Bây giờ bạn chỉ cần có để có được byte của bạn vào một int.

4

Làm thế nào về:

public static String bytesToHex(byte[] bytes) { 
    final char[] hexArray = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 
    char[] hexChars = new char[bytes.length * 2]; 
    int v; 
    for (int j = 0; j < bytes.length; j++) { 
     v = bytes[j] & 0xFF; 
     hexChars[j * 2] = hexArray[v >>> 4]; 
     hexChars[j * 2 + 1] = hexArray[v & 0x0F]; 
    } 
    return new String(hexChars); 
} 

Source

+2

Có vẻ như sao chép và dán từ câu hỏi trùng lặp. Bạn nên ít nhất đề cập đến nguồn từ nơi bạn đã sao chép nó. – MrSmith42

+3

anh ta có liên kết nguồn như một phần của câu trả lời – ant

+3

@ MrSmith42: Tôi đã đặt nguồn gốc đậm cho bạn;) – Burkhard

0

Tham khảo Integer 's toHexString. Chuyển đổi số byte thành int của bạn và sau đó nhận được Chuỗi kết quả sẽ thực hiện thủ thuật. Tất nhiên, bạn sẽ phải ghép nối các Chuỗi với một số StringBuilder rồi.

0

Nếu mảng này dài 4 byte, bạn có thể ghép nối các byte và sử dụng phương thức Integer.toString (int, int).

byte[] array = /* initialization */; 
int x = 0; 
for (int i = 0, l = Math.min(array.length, 4); i < l; i++) { 
    x <<= 8; 
    x |= (array[i] & 0xFF); 
} 
String hex = Integer.toString(x, 16); 
45
public static String bytesToHex(byte[] in) { 
    final StringBuilder builder = new StringBuilder(); 
    for(byte b : in) { 
     builder.append(String.format("%02x", b)); 
    } 
    return builder.toString(); 
} 
1

Phương pháp này nên làm điều đó cho you..pass trong mảng byte như một tham số để trả lại chuỗi hex ...

private static String convertToHexString(byte[] data) { 
StringBuffer buf = new StringBuffer(); 
for (int i = 0; i < data.length; i++) { 
    int halfbyte = (data[i] >>> 4) & 0x0F; 
    int two_halfs = 0; 
    do { 
     if ((0 <= halfbyte) && (halfbyte <= 9)) 
      buf.append((char) ('0' + halfbyte)); 
     else 
      buf.append((char) ('a' + (halfbyte - 10))); 
      halfbyte = data[i] & 0x0F; 
     } while(two_halfs++ < 1); 
    } 
return buf.toString(); 
} 

hy vọng rằng sẽ giúp ..

0
import java.util.HashMap; 

public class NumUtil 
{ private static HashMap<Byte,char[]>byteToHex=new HashMap<Byte, char[]>(); 
    static 
    { for(int i=0;i<16;++i) 
      byteToHex.put((byte)i, new char[]{'0',Integer.toHexString(i).charAt(0)}); 
     for(int i=16;i<256;++i) 
      byteToHex.put((byte)i, Integer.toHexString(i).toCharArray()); 
    } 
    public static String toHexString(byte[]bytes) 
    { StringBuilder stringBuilder = new StringBuilder(bytes.length*2); 
     for(byte b:bytes) 
      stringBuilder.append(byteToHex.get(b)); 
     return stringBuilder.toString(); 
    } 
} 
Các vấn đề liên quan