【问题标题】:How to create a Java Hexadecimal Array如何创建 Java 十六进制数组
【发布时间】:2014-05-27 14:49:25
【问题描述】:

这似乎不合适。有没有办法创建一个十六进制数组?

 float[] bitBytes = {0x80, 0x40, 0x20, 0x10, 8, 4, 2, 1};

 for (int k = 0; k < alot; k++) {
  BitSet.set(increment++, ((array[k] & (bitBytes[k%8]& 0xff)) != 0));
}

【问题讨论】:

  • “十六进制数组”与常规数组有何不同? (您希望通过将整数分配给浮点数组来实现什么?)
  • 似乎没有充分的理由使用float
  • (1) 定义“似乎不合适”。 (2) 不存在十六进制数组。只有数组,可能带有初始值,如果存在,可能会在源代码中以十六进制表示。

标签: java hex bit-manipulation


【解决方案1】:

byte[] biteBytes = new byte[8]; for (int j = 0; j < bitBytes.length; j++) { bitBytes[j] = (byte) (Math.pow(2,j));
}

【讨论】:

  • 但是为什么要将byte 值分配给float 数组元素呢?
  • @owlstead - “per”没有byte
  • @HotLicks 我试图回答你,希望这能为你解决问题。浮点数用于原始问题。在 user1198289 的答案上创建一个长时间的对话并没有完成,我很抱歉在这里创建一个。我已经删除了我的 cmets,我建议你也这样做。
【解决方案2】:

十六进制是字节的表示String,或者至少是一个字符数组。它主要用于人类消费,因为它更容易看到字节的位值。

要创建包含字节值的字节数组,可以使用以下构造:

final byte[] anArray = { (byte) 0x10, (byte) 0x80 };

转换为字节 - (byte) - 实际上只需要 0x80 或更大的值,因为字节在 Java 中签名,因此只有 -0x80 到 0x7F 的值。通常我们只处理无符号值,所以我们需要强制转换。

或者,对于较大的字符串,只需将十六进制字符串提供给解码器会很有用。不幸的是,那些想出标准 API 的白痴仍然没有在 java.langjava.util 的某个地方定义标准的十六进制编解码器。

因此您可以使用其他库,例如 Apache 编解码器库或自写函数。 Stackoverflow 助您一臂之力。

Convert a string representation of a hex dump to a byte array using Java?

如果您想要字节数组中的值的BitSet,请使用BitSet.valueOf(byte[])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-09
    • 2021-11-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-12
    相关资源
    最近更新 更多