Работа с восьмеричными числами в 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)
}
Другие вопросы по тегам