为什么Byte.parseByte("10000001",2)会抛出一个NFE?

Pab*_*ano 5 java byte numberformatexception

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

String bits="10000001";
Byte.parseByte(bits,2);// throws a NFE
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

byte b=(byte)0x81; //1000 0001
Run Code Online (Sandbox Code Playgroud)

没有问题.

PS:我找到了一个解决方法,byte b=(byte)Integer.parseInt(bits, 2);但无论如何我想知道为什么我不能将8位转换成一个字节

jlo*_*rdo 7

10000001二进制是129十进制.因此,它比Byte.MAX_VALUE.

你的解决方案

byte b=(byte)0x81; //1000 0001
Run Code Online (Sandbox Code Playgroud)

将产生b价值-127.您的解决方法也是如此.