将字符串解析为字节的NumberFormat异常?

时间:2013-02-18 13:07:15

标签: java byte

我正在尝试将以下字符串解析为Byte.But它给了我NumberFormat Exception。可以告诉我这是什么解决方案?

Byte.parseByte("11111111111111111111111110000001", 2);

4 个答案:

答案 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   发生:

     
      
  1. 第一个参数为null或是一个长度为零的字符串。
  2.   
  3. 基数小于Character.MIN_RADIX或大于   Character.MAX_RADIX。
  4.   
  5. 字符串的任何字符都不是指定基数的数字,   除了第一个字符可能是减号' - '('\ u002D')   只要字符串长度超过1。
  6.   
  7. 字符串表示的值不是byte类型的值。
  8.         

    返回:由字符串参数表示的字节值   指定的基数抛出: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)

来自javadocs的

  

如果有任何类型,则抛出NumberFormatException类型的异常   发生以下情况:

     
      
  • 第一个参数为null或是一个长度为零的字符串。
  •   
  • 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX。
  •   
  • 字符串的任何字符都不是指定基数的数字,除了第一个字符可能是减号' - '('\ u002D')   只要字符串长度超过1。
  •   
  • 字符串表示的值不是byte类型的值。
  •   

您的值是超出范围-128到127

的第二种情况

答案 3 :(得分:0)

值太大,无法在 byte 中解析 试试这个:

new BigInteger("011111111111111111111111110000001", 2).longValue();