我正在尝试将以下字符串解析为Byte.But它给了我NumberFormat Exception。可以告诉我这是什么解决方案?
Byte.parseByte("11111111111111111111111110000001", 2);
答案 0 :(得分:2)
超出字节范围,即-128到127.来自parseByte(String s,int radix) javadoc:
public static byte parseByte(String s, int radix)throws NumberFormatException
将字符串参数解析为指定的基数中的带符号字节 第二个论点。字符串中的字符必须都是数字, 指定的基数(由Character.digit(char, int)返回非负值),但第一个字符可以 是一个ASCII减号' - '('\ u002D')来表示负值。 返回结果字节值。类型例外 如果出现以下任何一种情况,则抛出NumberFormatException 发生:
- 第一个参数为null或是一个长度为零的字符串。
- 基数小于Character.MIN_RADIX或大于 Character.MAX_RADIX。
- 字符串的任何字符都不是指定基数的数字, 除了第一个字符可能是减号' - '('\ u002D') 只要字符串长度超过1。
- 字符串表示的值不是byte类型的值。
醇>返回:由字符串参数表示的字节值 指定的基数抛出:NumberFormatException - 如果字符串没有 包含一个可解析的字节。
答案 1 :(得分:2)
Byte.parseByte()
处理二进制字符串作为符号幅度而不是2的补码,因此对于一个字节,最长的长度是带有符号的7位。
换句话说,要表示-127
,您应该使用:
Byte.parseByte("-111111", 2);
以下内容NumberFormatException
:
Byte.parseByte("10000000", 2);
但是,-127的二进制文字是:
byte b = (byte) 0b10000000;
相同的行为适用于其他parseXXX()
方法。
答案 2 :(得分:1)
如果有任何类型,则抛出NumberFormatException类型的异常 发生以下情况:
- 第一个参数为null或是一个长度为零的字符串。
- 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX。
- 字符串的任何字符都不是指定基数的数字,除了第一个字符可能是减号' - '('\ u002D') 只要字符串长度超过1。
- 字符串表示的值不是byte类型的值。
您的值是超出范围-128到127
的第二种情况答案 3 :(得分:0)
值太大,无法在 byte 中解析 试试这个:
new BigInteger("011111111111111111111111110000001", 2).longValue();