Работа с восьмеричными числами в Swift
Я могу легко превратить десятичное число в восьмеричное, но я пытаюсь сделать наоборот, и я застрял.
let decimal = 11_224_393
let octString = String(rawAddress, radix: 8, uppercase: false)
let octal = octString.toInt()
Вопрос
Я хочу, чтобы функция, которая дает Int восьмеричных цифр, считывала ее как восьмеричную и преобразовывала в десятичную
такие как:
// oct2dec(777) = 511
// oct2dec(10) = 8
func oct2dec(octal : Int) -> Int {
// what goes here?
}
2 ответа
Решение
Использование функций преобразования строк довольно ужасно в моем варианте. Как насчет чего-то вроде этого:
func octalToDecimal(var octal: Int) -> Int {
var decimal = 0, i = 0
while octal != 0 {
var remainder = octal % 10
octal /= 10
decimal += remainder * Int(pow(8, Double(i++)))
}
return decimal
}
var decimal = octalToDecimal(777) // decimal is 511
Просто используйте родные восьмеричные литералы и инициализаторы Swift ( String
от целого числа | Int
от String
)
let octalInt = 0o1234 // 668
let octalString = "1234" // "1234"
let decimalIntFromOctalString = Int(octalString, radix: 0o10) // 668
let octalStringFromInt = String(octalInt, radix: 0o10) // "1234"
Для вашего конкретного случая использования:
let decimal = 11_224_393
let octString = String(rawAddress, radix: 0o10, uppercase: false)
guard let octal = Int(octString, radix: 0o10) else {
print("octString was not a valid octal string:", octString)
}