为什么byte.parsebyte(“10000001”,2)抛出nfe?

ogsagwnx  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(290)

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

String bits="10000001";
Byte.parseByte(bits,2);// throws a NFE

但如果我这么做了:

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

没有问题。
我找到了一个解决办法, byte b=(byte)Integer.parseInt(bits, 2); 但不管怎样,我想知道为什么我不能把8位转换成一个字节

ds97pgxw

ds97pgxw1#

10000001 二进制是 129 十进制的。因此,它比 Byte.MAX_VALUE .
你的解决方案

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

将导致 b 有价值的 -127 . 这同样适用于您的解决方案。

相关问题