android代码的说明

时间:2016-03-14 08:35:01

标签: java

我找到了一个将十六进制字符串转换为二进制的代码。这是代码`

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]));。任何人都可以解释这段代码在做什么。处理二进制代码非常困难。任何人都可以提供一些文档的链接,通过一些示例解释如何使用二进制编码。

2 个答案:

答案 0 :(得分:2)

&LT;&LT;意味着将值向左移动4位。因此,如果值为0000001,则将其向左移动4将为您提供00010000意味着逐位ORing 2值。

charToByte将采用0 ... 9,A ... F范围内的单个字符并返回其十六进制值 - 这将恰好为0到15(适合4位)。

如果你有两个我们知道的值是4位大的值,那么将一个值向左移位4位并将它们组合在一起将它们组合成1个字节 - 第一个值将在字节的4个最大位中,另一个值将在字节的4个最小位中。

答案 1 :(得分:0)

Gebe Sechan的回答非常正确。我想补充说,如果你知道如何调用它们,可以很容易地找到按位和位移运算符的解释。例如,这是official tutorial