將字節轉換為十六進制的Java代碼我有一個字節數組。我希望將該數組的每個字節字符串轉換為相應的十六進制值。Java中是否有將字節數組轉換為十六進制的函數?
3 回答

米脂
TA貢獻1836條經驗 獲得超3個贊
private static final String HEXES = "0123456789ABCDEF";static String getHex(byte[] raw) { final StringBuilder hex = new StringBuilder(2 * raw.length); for (final byte b : raw) { hex.append(HEXES.charAt((b & 0xF0) >> 4)).append(HEXES.charAt((b & 0x0F))); } return hex.toString();}
String.format
public class MyTest{ private static final String HEXES = "0123456789ABCDEF"; @Test public void test_get_hex() { byte[] raw = { (byte) 0xd0, (byte) 0x0b, (byte) 0x01, (byte) 0x2a, (byte) 0x63, (byte) 0x78, (byte) 0x01, (byte) 0x2e, (byte) 0xe3, (byte) 0x6c, (byte) 0xd2, (byte) 0xb0, (byte) 0x78, (byte) 0x51, (byte) 0x73, (byte) 0x34, (byte) 0xaf, (byte) 0xbb, (byte) 0xa0, (byte) 0x9f, (byte) 0xc3, (byte) 0xa9, (byte) 0x00, (byte) 0x1e, (byte) 0xd5, (byte) 0x4b, (byte) 0x89, (byte) 0xa3, (byte) 0x45, (byte) 0x35, (byte) 0xd6, (byte) 0x10, }; int N = 77777; long t; { t = System.currentTimeMillis(); for (int i = 0; i < N; i++) { final StringBuilder hex = new StringBuilder(2 * raw.length); for (final byte b : raw) { hex.append(HEXES.charAt((b & 0xF0) >> 4)).append(HEXES.charAt((b & 0x0F))); } hex.toString(); } System.out.println(System.currentTimeMillis() - t); // 50 } { t = System.currentTimeMillis(); for (int i = 0; i < N; i++) { StringBuilder hex = new StringBuilder(2 * raw.length); for (byte b : raw) { hex.append(String.format("%02X", b)); } hex.toString(); } System.out.println(System.currentTimeMillis() - t); // 2535 } }}
編輯
import javax.xml.bind.DatatypeConverter;DatatypeConverter.printHexBinary(raw);
添加回答
舉報
0/150
提交
取消