为什么Java会抛出NumberFormatException

Qai*_*ood 2 java exception

在将字符串解析为byte时遇到异常

String Str ="9B7D2C34A366BF890C730641E6CECF6F";

String [] st=Str.split("(?<=\\G.{2})");

byte[]bytes = new byte[st.length];
for (int i = 0; i <st.length; i++) {
 bytes[i] = Byte.parseByte(st[i]);
}
Run Code Online (Sandbox Code Playgroud)

Paŭ*_*ann 5

假设您要将字符串解析为十六进制,请尝试以下操作:

bytes[i] = Byte.parseByte(st[i], 16);
Run Code Online (Sandbox Code Playgroud)

默认基数为10,显然B不是基数为10的数字.


MBy*_*ByD 5

那是因为默认的解析方法需要一个十进制格式的数字来解析十六进制数,使用这个解析:

Byte.parseByte(st[i], 16);
Run Code Online (Sandbox Code Playgroud)

其中16是解析的基础.

至于你的评论,你是对的.字节的最大值为0x7F.因此,您可以将其解析为int并执行二进制AND操作0xff以获取LSB,这是您的字节:

bytes[i] = Integer.parseInt(st[i], 16) & 0xFF;
Run Code Online (Sandbox Code Playgroud)