将我的 32 位放入一个 4 字节数组
Putting my 32 bits into a 4 bytearray
我正在将不同的二进制数放入一个字节数组中。其中一个数字是: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 个空位。我该如何解决这个问题?我怎么搞砸了?
感谢所有帮助。
您的输入字符串 "10001101010010010000000000001000"
代表的值对于 signed Integer
来说太大了。 Integer.MAX_VALUE = 2147483647
并且您传递的输入字符串的值为 2370371592
.
Integer.parseInt
不会将 位置右起第 32 位的前导 1
解释为 符号 。如果您想解析负值,则必须在其前面加上 -
符号。
请参阅此 answer 了解更多说明。
如果您希望输入 "10001101010010010000000000001000"
实际上意味着 "-0001101010010010000000000001000"
,只需将第一个字符替换为 +
/-
,具体取决于右起 32 位的值.
或者,如果您想处理 Two's complement compatible way you can use approach from this answer 中的二进制字符串:
int msb = Integer.parseInt("1000110101001001", 2);
int lsb = Integer.parseInt("0000000000001000", 2);
int result = msb<<16 | lsb;
我正在将不同的二进制数放入一个字节数组中。其中一个数字是: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 个空位。我该如何解决这个问题?我怎么搞砸了? 感谢所有帮助。
您的输入字符串 "10001101010010010000000000001000"
代表的值对于 signed Integer
来说太大了。 Integer.MAX_VALUE = 2147483647
并且您传递的输入字符串的值为 2370371592
.
Integer.parseInt
不会将 位置右起第 32 位的前导 1
解释为 符号 。如果您想解析负值,则必须在其前面加上 -
符号。
请参阅此 answer 了解更多说明。
如果您希望输入 "10001101010010010000000000001000"
实际上意味着 "-0001101010010010000000000001000"
,只需将第一个字符替换为 +
/-
,具体取决于右起 32 位的值.
或者,如果您想处理 Two's complement compatible way you can use approach from this answer 中的二进制字符串:
int msb = Integer.parseInt("1000110101001001", 2);
int lsb = Integer.parseInt("0000000000001000", 2);
int result = msb<<16 | lsb;