【问题标题】:Converting integer array to byte array [duplicate]将整数数组转换为字节数组[重复]
【发布时间】:2015-03-12 08:26:45
【问题描述】:

我目前正在编写一个通过回调与 Windows 驱动程序交互的小型应用程序。此应用程序记录各种 XY 坐标和按钮状态,以整数表示。应用程序将通过本地网络将此数据发送到回调。我对数据包的经验至少可以说是有限的,但我至少知道我需要将值转换为字节数组。

例如,下面是两组数组:

int[][] axes = { {75, 150}, {0, 40} };

int[] buttons= {0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1}

我将如何将这些值转换为字节数组?另外,偏移量有什么用?我环顾四周,无法完全理解它。

【问题讨论】:

  • 所有答案都假定您不介意为每个整数使用 4 位(即使可以使用一个字节进行转换)。如果您有大量低值整数,您可能想查看另一种在最高位上使用位编码的解决方案,但我现在没有足够的时间来编写它。如果你晚上还想了解它,我会发布它。
  • @NitroNbg 我设法弄明白了。不过感谢您的帮助!

标签: java android


【解决方案1】:

您需要遍历数组的所有元素,然后逐个提取每个整数的字节。假设一个整数是 4 个字节,您可以使用位移操作并从整数中提取每 8 位。之后,使用字节数据类型就可以创建数组了。

例如a = 10110011 11101010 11110101 11010100 //二进制

      byte 3    byte 2  byte 1  byte 0

字节 0 = a & 0xFF

字节 1 = (a >> 8) & 0xFF

字节 2 = (a >> 16) & 0xFF

字节 3 = (a >> 24) & 0xFF

要转换回整数,对于字节数组中的每组 4 个字节:

数字 = (字节3

【讨论】:

  • True 并且将其重新编译回整数将是 int originalInt = byte0 | (byte1 << 8) | (byte2 << 16) | (byte3 << 24)
【解决方案2】:

将 int 转换为 byte[]。 创建这个函数:

byte[] toBytes(int i)
{
  byte[] result = new byte[4];

  result[0] = (byte) (i >> 24);
  result[1] = (byte) (i >> 16);
  result[2] = (byte) (i >> 8);
  result[3] = (byte) (i /*>> 0*/);

  return result;
}

在您的 int[] 上循环运行,每次调用该函数的单元格并将结果添加到字节数组中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-19
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 2012-07-11
    • 2010-12-28
    相关资源
    最近更新 更多