我想在字符串中拆分两个字符中的每一个并将其转换为十六进制字节数组表示, 我只是失去了怎么做。
在字符串a = hex a中,十进制为10 在字符串b =十六进制b中,十进制为11
String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc";
byte[] output = new byte[12];
Input
ab bb bb bb bb bb bb bb bb bb bb bc
output
[-85, -69, -69, -69, -69, -69, -69, -69, -69, -69, -69, -68]
答案 0 :(得分:1)
取一组两个中的第一个字符,将其十六进制值乘以16
(161
位置中的#)。该结果将添加到第二个字符的十六进制值中。
String toConvert = "abbbbbbbbbbbbbbbbbbbbbbc";
byte[] output = new byte[toConvert.length() / 2];
for (int i = 0; i < output.length; i++) {
output[i] |= Character.digit(toConvert.charAt(i * 2), 16) * 16;
output[i] |= Character.digit(toConvert.charAt(i * 2 + 1), 16);
}
答案 1 :(得分:0)
Apache Common Codec的Hex类正是您所需要的:
byte[] bytes = Hex.decodeHex("abbbbbbbbbbbbbbbbbbbbbbc".toCharArray());
如果您不能/不会使用第三方,您可以随时“借用”他们的实施(略微简化 - 为简单起见省略了正确性检查):
public static byte[] decodeHex(final char[] data) {
final int len = data.length;
// Handle empty string - omitted for clarity's sake
final byte[] out = new byte[len >> 1];
// two characters form the hex value.
for (int i = 0, j = 0; j < len; i++) {
int f = Character.digit(data[j], 16) << 4;
j++;
f = f | Character.digit(data[j], 16);
j++;
out[i] = (byte) (f & 0xFF);
}
return out;
}
答案 2 :(得分:0)
for(int i = 0; i < 12; i++) {
output[i] = (byte) Integer.parseInt(toConvert.substring(i*2, i*2+2), 16);
}