簡體   English   中英

將字符串解析為字節的NumberFormat異常?

[英]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類型的異常:

  1. 第一個參數為null或長度為零的字符串。
  2. 基數小於Character.MIN_RADIX或大於Character.MAX_RADIX。
  3. 字符串的任何字符都不是指定基數的數字,除非第一個字符可以是減號'-'('\\ u002D'),前提是該字符串長於長度1。
  4. 字符串表示的值不是字節類型的值。

返回:由指定基數中的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM