在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(),不干自己该干的事情!
直到现在这个问题也还在啊,看样子是不想解决了!
316





