Java是在符號性非常挑剔,也不會接受值溢出。因此,如果你解析一個字節並且它大於127(例如,130十進制或83十六進制),你將得到一個NumberFormatException異常。如果將8位十六進制數字解析爲整數(或16位十六進制數字作爲長整數)並且以8-F開頭,則會發生同樣的情況。這些值不會被解釋爲負數(二的補碼),但是不合法。
如果您認爲這是肛門保留型,我完全同意。但這是Java風格。
要將十六進制值解析爲二進制補碼數字,請使用足夠大的整數類型(例如,如果您正在解析字節,則使用Integer並在稍後將其轉換爲字節),或者 - 如果需要解析長,將數字分成一半16位數字,然後合併。這裏有一個例子:
public static long longFromHex(String s) throws IllegalArgumentException {
if (s.length() == 16)
return (Long.parseLong(s.substring(0,8),16)<<32)|(Long.parseLong(s.substring(8,16),16)&0xffffffffL);
return Long.parseLong(s, 16);
}
或者讀一個字節,只需使用整數代替:
public static byte byteFromHex(String s) throws IllegalArgumentException {
int i = Integer.parseInt(s, 16);
if (i < 0 || i > 255) throw new IllegalArgumentException("input string "+s+" does not fit into a Byte");
return (byte)i;
}
當你打印的價值'st'你看到了什麼? –