Как преобразовать восьмеричное число в десятичное в Swift

Привет, я пытаюсь быстро преобразовать восьмеричное число в десятичное. Какой самый простой способ сделать это?


person user190494    schedule 19.07.2016    source источник
comment
Возможный дубликат Работа с восьмеричными числами в swift   -  person pableiros    schedule 19.07.2016


Ответы (2)


От восьмеричного к десятичному

Для этого существует специальный инициализатор Int

let octal = 10
if let decimal = Int(String(octal), radix: 8) {
    print(decimal) // 8
}

От десятичной к восьмеричной

let decimal = 8
if let octal = Int(String(decimal, radix: 8)) {
    print(octal) // 10
}

Примечание 1. Обратите внимание: круглые скобки в двух фрагментах кода отличаются.

Примечание 2. Инициализатор Int может дать сбой для строковых представлений числа с более экзотическими системами счисления. Прочтите комментарий @AMomchilov ниже.

person Luca Angeletti    schedule 19.07.2016
comment
Круто, а вы знаете, как бы вы поступили наоборот? Спасибо :) - person user190494; 19.07.2016
comment
@user190494 user190494 Переход от десятичного к восьмеричному? - person Alexander; 19.07.2016
comment
ага, десятичный в восьмеричный. Спасибо, бро. - person user190494; 19.07.2016
comment
Имейте в виду: числа не имеют системы счисления. Основание необходимо, чтобы указать способ форматирования числа для интерпретации людьми. Величины, выраженные этими строковыми представлениями, существуют отдельно от всех любых систем счисления и строковых представлений. - person Alexander; 19.07.2016
comment
@appzYourLife Я совершенно уверен, что инициализатор Int может дать сбой для строковых представлений чисел с более экзотическими системами счисления. Вам все равно не нужно это преобразование Int, вы можете просто распечатать результат вызова String(_:, radix:) - person Alexander; 19.07.2016
comment
@AMomchilov: да, это имеет смысл, я добавил примечание к своему ответу, спасибо. - person Luca Angeletti; 19.07.2016

вы можете легко преобразовать восьмеричное число в десятичное. Swift изначально поддерживает восьмеричный синтаксис. Вы должны написать «0o» перед восьмеричным числом.

let number = 0o10
print(number) // it prints the number 8 in decimal

Целочисленные литералы

Целочисленные литералы представляют целые значения неопределенной точности. По умолчанию целочисленные литералы выражаются в десятичном формате; вы можете указать альтернативную базу, используя префикс. Двоичные литералы начинаются с 0b, восьмеричные литералы начинаются с 0o, а шестнадцатеричные литералы начинаются с 0x.

Вот ссылка на документацию.

Я надеюсь, что это поможет вам

person David Giordana    schedule 06.06.2017