文字列をバイトに変換しようとしていますが、NumberFormatException
.
String s = "SYNC";
Byte b = Byte.valueOf(s);
System.out.println(b);
String example = "This is an example";
byte[] bytes = example.getBytes();
Java のバイトの範囲は [-128;127] です。ASCII char 値 83、89、78、67 としてエンコードされた「SYNC」文字列。4 つの値のシーケンスを 1 つの値に変換したくないのはどうしてですか?
呼び出しシーケンス: Byte.valueOf(str) => Byte.parseByte(str, 10) => Integer.parseInt(str, 10)
したがって、文字列を基数 10 の数値として使用しようとします。この文字列内のすべての文字が 10 (この基数の最大値) より大きいため、NumberFormatException がスローされます。
文字列内のすべての文字が有効なベース 10 文字の場合。文字列「546」など、paseInt は正しく終了します。ただし、parseByte はバイト範囲 [-127:128] をチェックします。値が範囲内にない場合 NumberFormatException。
使ってみて.getBytes()
String s = "SYNC";
byte[] lst = s.getBytes();
for(byte b : lst ){
System.out.println(b);
}
探しているのが特定の文字列の 1 文字である場合は、.charAt()
代わりに使用することをお勧めします。(または、単純に を使用して byte を char に変換することもできます(char)
)。
System.out.println(s.charAt(0)); //Prints first character from given string
文字列は、一連のバイトにのみ変換できます。
java.lang.Byte
さらにドキュメントが言うように、文字列内の文字はすべて10進数でなければなりませんまたは引数は、のAPIが言うように、符号付き10進数バイトを表すものとして解釈されます。
指定された文字列で指定された値を保持する Byte オブジェクトを返します。引数は、あたかも引数が parseByte(java.lang.String) メソッドに与えられたかのように、符号付き 10 進バイトを表すものとして解釈されます。結果は、文字列で指定されたバイト値を表す Byte オブジェクトです。
以下のようにしてください。
String s = "SYNC";
byte[] b = s.getBytes();
数値はバイト範囲内である必要があります。そうでない場合、NumberFormatException がスローされます。
byte[] bytes = s.getBytes();
これを試して: