【问题标题】:Int to byte array - byte shiftingInt 到字节数组 - 字节移位
【发布时间】:2015-10-27 17:26:58
【问题描述】:

我正在尝试将一个 int(最大 65535)转换为一个两字节数组。 在 C 中我使用了 uint16,但 Java 不知道任何无符号值。

要将字节转换为数组,我尝试使用它:

byte[] data = { (byte) ((num >> 8) & 0xff), (byte) (num & 0xff) };

但如果我使用 16335 作为值,我只会得到:[63, -49] 而不是:[63, 207]。 有没有办法在 Java 中做到这一点?

我需要字节数组中的这个无符号字节来使用输出流发送它

【问题讨论】:

  • 字节在 java 中签名...(所以 -49 ~= 207)
  • 这些是正确的字节。问题是您是否在符号有问题的任何上下文中使用它们,如果是这样,您期望用什么来代替 -49,因为 207 不是 Java 中字节的有效值。 Java 中没有无符号整数,但在特定情况下您可以使用有符号整数/短/字节进行无符号操作。
  • -49 是打印字节时屏幕上打印的值,因为 Java 将其视为有符号值。但是,如果 Java 中存在无符号字节,则该字节内的位与无符号字节 207 内的位相同。 -49 是正确的值。如果您愿意,可以将其打印为 207。如果您将其发送到输出流中并在 C 中将其作为无符号字节读取,您将得到 207。
  • @ForJ9 它们是一样的,只是在你的字节流中发送。
  • 感谢您的所有 cmets!不存在的问题现在解决了;)

标签: java arrays bytearray


【解决方案1】:

你可以使用java的NIO的ByteBuffer来达到目的:

byte[] bytes = ByteBuffer.allocate(4).putInt(1695609641).array();

for (byte b : bytes) {
    System.out.println(Byte.toUnsignedInt(b));
}

希望现在它会起作用;)

【讨论】:

  • 不,我不能,因为它给出了相同的签名结果。我需要一个无符号值(例如 207)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 2016-04-05
  • 2012-08-12
  • 2010-11-19
  • 1970-01-01
相关资源
最近更新 更多