如何在Java中将字节数组转换为十六进制字符串?

36

我有一个由十六进制值组成的字节数组,例如CA, FA, 21, 33

但我想将它们作为单个元素CAFA2133列在JList中。 为了将它们列在JList中,我认为我需要将它转换为字符串。 那么您有什么建议吗?

8个回答

55
public static String bytesToHex(byte[] in) {
    final StringBuilder builder = new StringBuilder();
    for(byte b : in) {
        builder.append(String.format("%02x", b));
    }
    return builder.toString();
}

48
您需要查看String.format()和Formatter规范。例如:使用String.format()格式化byteValue,以十六进制表示,使用"%02x"。遍历数组并将每个String.format()结果附加到StringBuilder中。请参考String.format()Formatter说明来执行此操作。请保留HTML标记。

很好,很简单。我不需要费劲翻阅其他重复的问题和答案,那么多的长篇文字 :) - andrei
1
它可以工作,但是与基于字节操作的以下方法相比,需要大约3倍的时间。 - darkled
有趣。你能在下面链接到具体的答案吗? - Brian Agnew

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


2
看起来是从重复的问题中复制粘贴的。你至少应该提到你复制的来源。 - MrSmith42
3
他的回答中包含了源链接。 - ant
3
@MrSmith42:我已经为您加粗了来源;)。 - Burkhard

1
这个方法应该可以帮你实现这个功能...将字节数组作为参数传入,返回十六进制字符串。
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
如果这个数组长度为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);

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

0
你可以使用 Integer.toString(int i, int radix) 将每个数字转换为十六进制字符串,然后将它们连接起来。现在你只需要将字节转换成整数即可。

0
参考 IntegertoHexString。 将你的 byte 转换为 int,然后获取结果字符串即可。 当然,你需要使用 StringBuilder 进行字符串拼接。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接