0

我正在尝试将字符串转换为字节,但我变成了NumberFormatException.

String s = "SYNC";
Byte b = Byte.valueOf(s);
System.out.println(b);
4

5 回答 5

2
  String example = "This is an example";
  byte[] bytes = example.getBytes();
于 2013-02-18T08:10:08.953 回答
0

Java 中的字节范围为 [-128;127]。编码为 ASCII 字符值 83、89、78、67 的“SYNC”字符串。您如何不将 4 个值的序列转换为仅 1 个值?

调用顺序:Byte.valueOf(str) => Byte.parseByte(str, 10) => Integer.parseInt(str, 10)

  1. 因此,您尝试使用字符串作为基数为 10 的数字。此字符串中的所有字符都大于 10(此基数的最大值),因此将抛出 NumberFormatException。

  2. 如果您的字符串中的所有字符都有效,则以 10 个字符为基数。如字符串“546”,paseInt 将正确完成。但是 parseByte 会检查字节范围 [-127:128]。如果值不在 NumberFormatException 范围内。

于 2013-02-18T08:17:47.590 回答
0

尝试使用.getBytes()

String s = "SYNC";
byte[] lst = s.getBytes();
for(byte b : lst ){
 System.out.println(b);
}

如果您要查找的是给定字符串中的单个字符,则可能要.charAt()改用。(或者您可以简单地将 byte 转换为 char 使用(char))。

System.out.println(s.charAt(0)); //Prints first character from given string
于 2013-02-18T08:00:59.357 回答
0

字符串只能转换为字节序列。

此外,正如文档所说,字符串中的字符必须都是十进制数字,或者参数被解释为表示有符号的十进制字节,如 APIjava.lang.Byte所说。

返回一个 Byte 对象,该对象保存由指定 String 给出的值。该参数被解释为表示一个带符号的十进制字节,就像将该参数提供给 parseByte(java.lang.String) 方法一样。结果是一个 Byte 对象,它表示字符串指定的字节值。

如下所示,

String s = "SYNC";
byte[] b = s.getBytes();
于 2013-02-18T08:01:02.817 回答
0

数字必须在字节范围内,否则会抛出 NumberFormatException。

 byte[] bytes = s.getBytes();

尝试这个:

于 2013-02-18T08:01:38.870 回答