[英]NumberFormat Exception to parse String to Byte?
我正在嘗試將以下字符串解析為Byte。但是它給了我NumberFormat Exception.body可以告訴我對此的解決方案是什么?
Byte.parseByte("11111111111111111111111110000001", 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。
- 字符串表示的值不是字節類型的值。
返回:由指定基數中的string參數表示的字節值拋出:NumberFormatException-如果字符串不包含可分析的字節。
Byte.parseByte()
二進制字符串作為符號大小而不是2的補碼來處理,因此一個字節的最大長度是7個帶符號的位。
換句話說,要表示-127
,應使用:
Byte.parseByte("-111111", 2);
以下引發NumberFormatException
:
Byte.parseByte("10000000", 2);
但是,-127的二進制文字是:
byte b = (byte) 0b10000000;
相同的行為適用於其他parseXXX()
方法。
來自javadocs
如果發生以下任一情況,將引發NumberFormatException類型的異常:
- 第一個參數為null或長度為零的字符串。
- 基數小於Character.MIN_RADIX或大於Character.MAX_RADIX。
- 字符串的任何字符都不是指定基數的數字,除非第一個字符可以是減號'-'('\\ u002D'),前提是該字符串長於長度1。
- 字符串表示的值不是字節類型的值。
您的值是第二個超出-128到127范圍的情況
值太大,無法以字節為單位進行解析請嘗試以下操作:
new BigInteger("011111111111111111111111110000001", 2).longValue();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.