我正在处理的Java代码从文件读取十六进制数字作为字节数组,我的工作是将字节数组转换回十六进制字符串。为简单起见,我使用十六进制数字字符串并将其转换为字节数组:
String hexString = "333112";
byte[] byteArray = hexString.getBytes(); // this is equivalent to what I got from reading files containing hex string
然后我使用以下方法将字节数组转换回十六进制字符串(从另一个SO线程复制)
static final char[] hexArray = "0123456789ABCDEF".toCharArray();
public static String getHex(byte[] raw) {
if ( raw == null ) {
return null;
}
char[] hexChars = new char[raw.length * 2];
for ( int j = 0; j < raw.length; j++ ) {
int v = raw[j] & 0xFF;
hexChars[j * 2] = hexArray[v >>> 4];
hexChars[j * 2 + 1] = hexArray[v & 0x0F];
}
return new String(hexChars);
}
String originalHexStr = getHex(byteArray);
System.out.println(originalHexStr);
但是,上面的print语句输出:333333313132
,它与原始的十六进制字符串333112
不同。所以我必须遗漏一些明显的东西。谢谢你的帮助!