Во-первых, вы, кажется, неправильно поняли основание, которое является вторым аргументом в valueOf
и parseInt
, и единственным аргументом с функцией расширения toInt
.Он не представляет биты в целевом числовом типе, он говорит методу, как преобразовать вашу строку.Обратите внимание, что есть вторая проблема, к которой я вернусь позже.
Radix - это базовый номер базовой системы счисления.По умолчанию это 10 (метод 0-arg toInt()
. toInt()
вызывает parseInt
, который выглядит так:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
Как видите, он использует radix = 10. Опять же, битытипа числа здесь не имеет значения. Википедия достаточно хорошо это охватывает, и Java более или менее следует той же системе. Как вы видите, 16 соответствует шестнадцатеричному. Поэтому подходящее основание для использования здесь - 16.
Однако у , как я уже упоминал, есть вторая проблема. Она все равно будет аварийно завершать работу, потому что значение не может быть проанализировано. Полученное число равно 3340525056
, что больше, чеммаксимальное значение int, равное 2147483647.
Это означает, что вы не можете использовать ни один из методов int, вам нужно использовать Long
.
Итак, для вашегослучай, это хорошо:
val x = "C71C5E00".toLong(16)
Опять же, основа - это система счисления, а не количество бит в результирующем числе. Если бы это было так, вам нужно было бы использовать 64 для длинных.