当前位置: 首页 > 面试题库 >

解码十六进制:此行的作用是(len&0x01)!= 0

吴凯
2023-03-14
问题内容

我正在看Apache Commons库中的一段代码,想知道这些条件到底能做什么。

public static byte[] decodeHex(final char[] data) throws DecoderException {

        final int len = data.length;

        if ((len & 0x01) != 0) { // what does this condition do
            throw new DecoderException("Odd number of characters.");
        }

        final byte[] out = new byte[len >> 1];

        // two characters form the hex value.
        for (int i = 0, j = 0; j < len; i++) {
            int f = toDigit(data[j], j) << 4;
            j++;
            f = f | toDigit(data[j], j);
            j++;
            out[i] = (byte) (f & 0xFF); // what is happening here.
        }

        return out;
    }

提前致谢。


问题答案:

这是一种1337(高性能)的编码方式:

if (len % 2 == 1)

即是len奇怪的。之所以有效,是因为每个奇数整数的二进制表示形式都有其最低有效位(即最后一位)。用位按位AND执行会1掩盖所有其他位,结果是1奇数还是0偶数。

这是C的遗留物,您可以在其中简单地编写代码:

if (len & 1)


 类似资料:
  • 问题内容: 我正在看Apache Commons库中的一段代码,想知道这些条件到底能做什么。 提前致谢。 问题答案: 这是一种1337(高性能)的编码方式: 即是奇怪的。之所以有效,是因为每个奇数整数的二进制表示形式都有其最低有效位(即最后一位)。用位按位执行会掩盖所有其他位,结果是奇数还是偶数。 这是C的遗留物,您可以在其中简单地编写代码:

  • 问题 你想将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成一个十六进制字符串。 解决方案 如果你只是简单的解码或编码一个十六进制的原始字符串,可以使用 binascii 模块。例如: >>> # Initial byte string >>> s = b'hello' >>> # Encode as hex >>> import binascii >>> h = binascii

  • 我在调试一个ANTLR语法时遇到了问题,我正在为Gameboy程序集工作。它似乎工作正常,但由于某些原因,它不能在某些边缘情况下处理十六进制的0x表示法。 如果我的输入字符串是“JR0x10”,antlr将失败,并出现'No Valide alternative at input‘错误。按照我的理解,这意味着我要么没有解析令牌流的规则,要么没有正确理解'0x'。如果我使用“JR$10”(我支持的替

  • 问题内容: 我有一个代表2的补码的十六进制字符串。是否有一种简单的方法(库/函数)将十六进制转换为十进制而不直接使用其位? EG这是给定左侧十六进制的预期输出: 谢谢! 问题答案: 这似乎在欺骗Java转换数字而不强制给出正结果: 当然,这种情况仅适用于8、16、32和64位2的补码:

  • 问题内容: 如何将十进制转换为以下格式的十六进制(至少两位,零填充,没有0x前缀)? 输入: 输出: 输入: 输出: 我尝试过,但似乎它显示了第一个示例,但没有显示第二个示例。 问题答案: 将该功能与格式一起使用。 该部分要求使用至少2位数字,并使用零将其填充到长度,表示小写的十六进制。 的 格式规范的迷你语言 也给你大写十六进制输出,并且可以前缀字段宽度与以包括或前缀(取决于你阉羊使用或作为格式

  • 问题内容: 我想将单元格的前景色设置为十六进制代码中的给定颜色。例如,当我尝试将其设置为红色时: 无论我在解码函数的参数中设置了什么十六进制值,getIndexed函数都将始终返回黑色。 可能是我做错了什么吗?我认为这是一个错误,但我不确定… 问题答案: 好消息是,如果您使用的是XSSF,而不是HSSF,那么解决问题的方法就很简单。您只需将样式变量转换为XSSFCellStyle。如果这样做,则存