java - 安卓代码说明

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

最佳答案

<< 表示将值左移 4 位。因此,如果该值为 0000001,则将其左移 4 将得到 00010000。表示对 2 个值进行“或”运算。

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

如果我们知道有 2 个值是 4 位大,则将其中一个值左移 4 位并将它们组合在一起将它们组合成 1 个字节 - 第一个值将位于该字节的 4 个最大位中,另一个值将位于该字节的 4 个最大位中将位于字节的 4 个最小位中。

关于java - 安卓代码说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35982770/

相关文章:

java - IBM WebSphere CPU 减少导致性能问题 - 应用程序和操作系统崩溃

java - 了解java.nio包中的 channel

java - JSON 中所选键的掩码值

java - 没有 java.lang.Math 的二进制对数?

java - Java中的数值计算

java - 拦截请求时出错

java - Spring 环境配置文件和 JPA

java - 以编程方式模拟平滑的拖动事件

java - 如何在没有访问 token 的情况下公开 Gitlab 包注册表?

java图像接收(网络)服务器