Java 为什么Byte.parseByte(“10000001”,2)抛出NFE?
我有一个位掩码存储在一个字节中,因为我只需要8位。当我创建它时,我将它作为一个字符串(我认为这样做会更容易),然后我用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.
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)但无论如何,我想知道为什么我不能将8位转换成一个字节10000001
二进制是129
十进制。因此,它大于Byte.MAX\u值
你的解决方案
byte b=(byte)0x81; //1000 0001
将导致b
具有值-127
。你的解决方法也是如此。简短回答:因为字节
是有符号的。是的,我知道,第一个1表示这是一个负数。我的观点是这不应该是个问题。如果我收到一个字符串,我怎么能存储-127呢?所以它只是字节。parseByte函数不能存储给定的字节,它需要先将它转换成一个数字。我想它会做一些事情,比如增加1,然后改变它们。0x81也是129,但它可以工作