我找到了将十六进制字符串转换为二进制的代码。这是代码`
public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}
public static byte charToByte(char c) {
System.out.println((byte) "0123456789ABCDEF".indexOf(c));
return (byte) "0123456789ABCDEF".indexOf(c);
}
该代码可以正常工作,但是我无法理解以下代码行,即
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
的工作方式。任何人都可以解释这段代码在做什么。处理二进制代码非常困难。任何人都还可以提供一些文档的链接,其中提供了一些示例说明如何使用二进制编码。 最佳答案
<
charToByte将采用0 ... 9,A ... F范围内的单个字符,并返回其十六进制值-恰好是0到15(适合4位)。
如果您有2个已知为4位的值,将一个值左移4位并将它们进行或运算将它们合并为1个字节-第一个值将位于该字节的4个最大位中,另一个值将位于字节的4个最小位。