【发布时间】:2016-04-07 08:51:33
【问题描述】:
我将不同的二进制数放入一个字节数组中。其中一个数字是:10001101010010010000000000001000 这个数字在我尝试解析它的行上给了我一个NumberFormatException,显然是因为它太大了。请参阅下面的代码,其中string 是二进制数。
int number = Integer.parseInt(string, 2);
ByteBuffer bytes = ByteBuffer.allocate(4).putInt(number);
byte[] byteInstruction = bytes.array();
我想要的是将数字放入我的字节数组中,但由于它们是 32 位数字,我不想在我的数组中占用超过 4 个字节。当我使用 long 进行解析时,它可以工作,但是我在字节数组中占用了 8 个空格。
long number = Long.parseLong(string, 2);
ByteBuffer bytes = ByteBuffer.allocate(8).putLong(number);
byte[] byteInstruction = bytes.array();
如果我稍后打印出数组,我会得到:
[0, 0, 0, 0, -115, 73, 0, 8]
我们可以看到有 4 个空位。我该如何解决这个问题?我怎么搞砸了? 感谢所有帮助。
【问题讨论】:
-
关键是这个数字不适合
int,因为在Java中int是签名的。 -
你没有搞砸任何事情。 long 是 64 位,即 8 个字节
-
@cricket_007 但是我能做什么呢?因为我只想将我的号码存储在我的字节数组中的 4 个空格中,而不是 8 个。
-
我不认为这个数字对于 int 来说太大了。签名的话只是一个很大的负数
-
使用
int number = (int)Long.parseLong(string,2);