解码十六进制:这行代码做什么(len&0x01)!= 0

Arno_Geismar

我正在看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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

以十六进制显示的打印“ A”(printf(“ \ 0x41”))

来自分类Dev

Java int以0x十六进制

来自分类Dev

十六进制值0x07,是无效字符

来自分类Dev

以十六进制显示的打印“ A”(printf(“ \ 0x41”))

来自分类Dev

将十六进制值前缀为0x

来自分类Dev

为什么十六进制数字以#而不是0x开头?

来自分类Dev

VB.net发送带有不需要的“ 0x3 ..”的十六进制代码。AVR8535上的十六进制

来自分类Dev

十六进制数的往返前导 0

来自分类Dev

什么| 0x01 用C语言做什么?

来自分类Dev

向我解释十六进制“ 0xf0”中的“ x”来自哪里

来自分类Dev

当十六进制值为0x0A时,阻止python写回车符

来自分类Dev

向我解释十六进制“ 0xf0”中的“ x”来自哪里

来自分类Dev

CPP读取0x0A作为字符串而不是十六进制

来自分类Dev

将字符串转换为十六进制格式并将“0x”附加到十六进制值

来自分类Dev

十六进制数 0x000000000032000000 如何对应十进制的 50?

来自分类Dev

java十六进制到int转换-必须删除0X吗?

来自分类Dev

如何使用Qt QSerialPort发送十六进制0x00

来自分类Dev

C#十六进制值0x12,是无效字符

来自分类Dev

十六进制值0x00是加载XML文档的无效字符

来自分类Dev

十六进制值0x1F是无效字符。1号线,位置1

来自分类Dev

HtmlAgilityPack名称中不能包含'“'字符(十六进制值0x22)

来自分类Dev

将字符串转换为十六进制,如“ 88”到0x88

来自分类Dev

Linq to Xml:异常-名称中不能包含''字符,十六进制值0x20

来自分类Dev

XMLDocument.Load(),十六进制值0x17,是无效字符

来自分类Dev

C#十六进制值0x12,是无效字符

来自分类Dev

如何使用Qt QSerialPort发送十六进制0x00

来自分类Dev

DataContractSerializer-名称不能以“。”开头 字符,十六进制值0x2E

来自分类Dev

如何在 Java 中将字符串转换为 0x 十六进制格式?

来自分类Dev

')' 字符,十六进制值 0x29,不能包含在名称中

Related 相关文章

  1. 1

    以十六进制显示的打印“ A”(printf(“ \ 0x41”))

  2. 2

    Java int以0x十六进制

  3. 3

    十六进制值0x07,是无效字符

  4. 4

    以十六进制显示的打印“ A”(printf(“ \ 0x41”))

  5. 5

    将十六进制值前缀为0x

  6. 6

    为什么十六进制数字以#而不是0x开头?

  7. 7

    VB.net发送带有不需要的“ 0x3 ..”的十六进制代码。AVR8535上的十六进制

  8. 8

    十六进制数的往返前导 0

  9. 9

    什么| 0x01 用C语言做什么?

  10. 10

    向我解释十六进制“ 0xf0”中的“ x”来自哪里

  11. 11

    当十六进制值为0x0A时,阻止python写回车符

  12. 12

    向我解释十六进制“ 0xf0”中的“ x”来自哪里

  13. 13

    CPP读取0x0A作为字符串而不是十六进制

  14. 14

    将字符串转换为十六进制格式并将“0x”附加到十六进制值

  15. 15

    十六进制数 0x000000000032000000 如何对应十进制的 50?

  16. 16

    java十六进制到int转换-必须删除0X吗?

  17. 17

    如何使用Qt QSerialPort发送十六进制0x00

  18. 18

    C#十六进制值0x12,是无效字符

  19. 19

    十六进制值0x00是加载XML文档的无效字符

  20. 20

    十六进制值0x1F是无效字符。1号线,位置1

  21. 21

    HtmlAgilityPack名称中不能包含'“'字符(十六进制值0x22)

  22. 22

    将字符串转换为十六进制,如“ 88”到0x88

  23. 23

    Linq to Xml:异常-名称中不能包含''字符,十六进制值0x20

  24. 24

    XMLDocument.Load(),十六进制值0x17,是无效字符

  25. 25

    C#十六进制值0x12,是无效字符

  26. 26

    如何使用Qt QSerialPort发送十六进制0x00

  27. 27

    DataContractSerializer-名称不能以“。”开头 字符,十六进制值0x2E

  28. 28

    如何在 Java 中将字符串转换为 0x 十六进制格式?

  29. 29

    ')' 字符,十六进制值 0x29,不能包含在名称中

热门标签

归档