【问题标题】:How to convert A string that represents an integer to unsigned byte array in Java?如何在Java中将表示整数的字符串转换为无符号字节数组?
【发布时间】:2012-03-23 08:51:25
【问题描述】:

基本上,我想要的是将"123456" 之类的字符串转换为无符号字节数组:[1, 226, 64]。然而,我到处寻找,我发现得到的是 2 的补码(有符号)字节数组[1, -30, 64]

byte[] array = new BigInteger("123456").toByteArray();
System.out.println(Arrays.toString(array));

输出:

[1, -30, 64]

那么,如何在 Java 中实现呢?我希望输出是:

[1, 226, 64]

编辑:我知道字节最多只能容纳 127 个,所以我需要它而不是字节数组是 int 数组。

【问题讨论】:

  • Java 中没有unsigned byte 类型,因此您必须将其转换为signed short/int 数组。

标签: java bytearray byte unsigned


【解决方案1】:

Java 没有无符号字节,因此要将它们转换为整数,就像它们是无符号的一样,您需要将它们按位 (&) 与 int 0xFF

byte[] array = new BigInteger("123456").toByteArray();
for (int i = 0; i < array.length; i++) { 
    System.out.println(0xFF & array[i]);
}

输出:

1
226
64

您不一定需要将它们存储为 int 数组 - 这取决于您想对它们做什么...

【讨论】:

    【解决方案2】:

    Java 没有无符号类型,因此您必须将值存储在 int 数组中。

    byte[] array = new BigInteger("123456").toByteArray(); 
    int[] unsigned_array = new int[array.length]; 
    for (int i = 0; i < array.length; i++) { 
        unsigned_array[i] = array[i] >= 0 ? array[i] : array[i] + 256;
    }
    

    相当简单。

    【讨论】:

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