在Java中想把 "9D"
转成 byte
,首先想到的是
byte v = Byte.parseByte("9D", 16);
结果得到一个 NumberFormatException
,说值的范围越界了:
Exception in thread "main" java.lang.NumberFormatException: Value out of range. Value:"9D" Radix:16
at java.base/java.lang.Byte.parseByte(Byte.java:154)
at App.main(App.java:3)
是的,byte
的范围是 -128~127,如果把 9D
当成正数来转换,结果是 157
,当然越界了。
问题是我用的是 Byte.parseByte()
啊……难道 Java 还不能明确我是要把 2 位 16 进制转换为 byte
么?最高位是 1 的情况,直接给我转换成负数 -99
就行,干嘛非要转换成 157
再告诉我越界呢……神仙!
无奈+无语之后当然还是要解决问题的,Byte.parseByte()
不行,那只好用 Integer.parseInt()
啦……
所以有这样两个处理办法
byte v = (byte) Integer.parseInt("9D", 16);
// 或者 byte v = Integer.valueOf("9D", 16).byteValue();
继续郁闷中……希望 JDK7 能解决这个问题,可恶的 Byte.parseByte()
,不干自己该干的事情!
直到现在这个问题也还在啊,看样子是不想解决了!