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来说太大。如果它是signeduseint 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;