Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么Byte.parseByte(“10000001”,2)抛出NFE?_Java_Byte_Numberformatexception - Fatal编程技术网

Java 为什么Byte.parseByte(“10000001”,2)抛出NFE?

Java 为什么Byte.parseByte(“10000001”,2)抛出NFE?,java,byte,numberformatexception,Java,Byte,Numberformatexception,我有一个位掩码存储在一个字节中,因为我只需要8位。当我创建它时,我将它作为一个字符串(我认为这样做会更容易),然后我用byte.parseByte(mask,2)将它转换为一个字节,但我发现它对某些值不起作用: String bits="10000001"; Byte.parseByte(bits,2);// throws a NFE 但如果我这样做: byte b=(byte)0x81; //1000 0001 没问题 PS:我找到了一个解决方法,byte b=(byte)Integer.

我有一个位掩码存储在一个字节中,因为我只需要8位。当我创建它时,我将它作为一个字符串(我认为这样做会更容易),然后我用
byte.parseByte(mask,2)
将它转换为一个字节,但我发现它对某些值不起作用:

String bits="10000001";
Byte.parseByte(bits,2);// throws a NFE
但如果我这样做:

byte b=(byte)0x81; //1000 0001
没问题


PS:我找到了一个解决方法,
byte b=(byte)Integer.parseInt(bits,2)
10000001
二进制是
129
十进制。因此,它大于Byte.MAX\u值

你的解决方案

byte b=(byte)0x81; //1000 0001

将导致
b
具有值
-127
。你的解决方法也是如此。

简短回答:因为
字节
是有符号的。是的,我知道,第一个1表示这是一个负数。我的观点是这不应该是个问题。如果我收到一个字符串,我怎么能存储-127呢?所以它只是字节。parseByte函数不能存储给定的字节,它需要先将它转换成一个数字。我想它会做一些事情,比如增加1,然后改变它们。0x81也是129,但它可以工作