Java 将我的32位放入4字节数组

Java 将我的32位放入4字节数组,java,parsing,bytearray,Java,Parsing,Bytearray,我把不同的二进制数放入一个字节数组。其中一个数字是:10001101010010000000000001000这个数字给了我一个NumberFormatException在我试图解析它的行上,显然是因为它太大了。请参见下面的代码,其中string是二进制数 int number = Integer.parseInt(string, 2); ByteBuffer bytes = ByteBuffer.allocate(4).putInt(number); byte[] byteInstructio

我把不同的二进制数放入一个字节数组。其中一个数字是:
10001101010010000000000001000
这个数字给了我一个
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”
表示的值对于带符号的来说太大了。您传递的输入字符串的值为
2370371592

Integer.parseInt
不会将右32位的前导
1
解释为符号。如果要解析负值,则必须在其前面加上
-
符号

通过解释了解更多信息

如果您希望输入的
“10001101010010000000000001000”
实际上意味着
“-000101010010010000000000001000”
,只需将第一个字符替换为
+
/
-
,具体取决于右起32位的值

或者,如果您想在中处理二进制字符串,可以使用以下方法:

intmsb=Integer.parseInt(“1000110101001001”,2);
int lsb=Integer.parseInt(“0000000000001000”,2);

int result=MSB问题在于,这个数字不适合
int
,因为在Java中,
int
是经过签名的。您没有搞糟任何事情。long是64位或8位bytes@cricket_007但是我能做什么呢?因为我只想在字节数组中的4个空格中存储我的数字,而不是8个空格。我不认为这个数字对于int来说太大。如果它是signeduse
int number=(int)Long.parseLong(string,2),它只是一个大的负数例如,它将100000000000000000000000转换为-0Integer.MIN\u值。请看我在评论中对两人的赞美链接question@MattTimmermans请参阅我的编辑。您还可以在问题中添加这两种补充要求,以便更容易找到
int msb = Integer.parseInt("1000110101001001", 2);
int lsb = Integer.parseInt("0000000000001000", 2);

int result = msb<<16 | lsb;