2013-03-15 144 views

回答

43

你需要看看String.format()Formatter規範。

例如

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

迭代通過陣列,並且每個String.format()結果附加到StringBuilder

+1

謝謝你的工作! – hiii 2013-03-15 11:43:28

+0

不錯,簡單。沒有必要通過對另一個重複問題和答案的文本牆進行篩選:) – andrei 2015-03-20 22:53:16

+1

它的工作原理,但它比基於字節操作的下面的方法需要大約3倍 – darkled 2016-08-16 14:16:31

4

如何:

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

看起來像從重複問題複製和粘貼。你至少應該提及你從哪裏複製它的來源。 – MrSmith42 2013-03-15 10:02:00

+3

他確實有源代碼鏈接作爲答案的一部分 – ant 2013-03-15 10:03:32

+3

@ MrSmith42:我已經把源代碼加粗了;) – Burkhard 2013-03-15 10:51:05

0

參見IntegertoHexString。 將您的byte轉換爲int,然後獲取結果字符串應該做的伎倆。 當然,您必須將字符串與StringBuilder連接。

0

如果此數組長度爲4個字節,則可以連接字節並使用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

此方法應該做的字節數組作爲參數,以返回十六進制字符串中you..pass ...

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(); 
} 

希望幫助..

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(); 
    } 
} 
相關問題