1 回答

TA貢獻(xiàn)1850條經(jīng)驗 獲得超11個贊
首先,您似乎誤解了基數(shù),它是valueOfand 中的第二個parseInt參數(shù),也是擴展函數(shù) 的唯一參數(shù)toInt。它不代表目標(biāo)數(shù)字類型中的位,它告訴方法如何通過通知它正在運行的基數(shù)來轉(zhuǎn)換你的字符串。請注意,還有第二個問題,我將在后面討論。
基數(shù)是基礎(chǔ)數(shù)字系統(tǒng)的基數(shù)。默認(rèn)情況下,它是10(0-ARGtoInt()方法toInt()調(diào)用parseInt,就像這樣:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
如您所見,它使用基數(shù) = 10。同樣,數(shù)字類型的位在這里無關(guān)緊要。維基百科很好地涵蓋了它,Java 或多或少遵循相同的系統(tǒng)。如您所見,16 對應(yīng)于十六進(jìn)制。所以這里使用的合適基數(shù)是 16。
然而,就像我提到的,還有第二個問題。它仍然會崩潰,因為無法解析該值。結(jié)果數(shù)字是3340525056,它大于最大 int 值,即 2147483647。
這意味著,您不能使用任何 int 方法;你需要使用它們Long。
所以,對于你的情況,這很好:
val x = "C71C5E00".toLong(16)
同樣,基數(shù)是要使用的數(shù)字系統(tǒng),而不是結(jié)果數(shù)字中的位數(shù)。如果是,則需要使用 64 來表示多頭。
獎勵:整數(shù)和長整數(shù)具有預(yù)定數(shù)量的位。通過使用toInt(),您已經(jīng)隱式請求 32 位。使用 Long,您請求的是 64 位。
添加回答
舉報