swift中八进制数的处理

swift中八进制数的处理,swift,octal,Swift,Octal,我可以很容易地将十进制数转换成八进制数,但我正试图做相反的事情,我被卡住了 let decimal = 11_224_393 let octString = String(rawAddress, radix: 8, uppercase: false) let octal = octString.toInt() 问题 我想要一个函数,给定一个八进制数字的整数,它将把它作为八进制读入,并将它转换成十进制 例如: // oct2dec(777) = 511 // oct2dec(10) = 8 f

我可以很容易地将十进制数转换成八进制数,但我正试图做相反的事情,我被卡住了

let decimal = 11_224_393
let octString = String(rawAddress, radix: 8, uppercase: false)
let octal = octString.toInt()
问题 我想要一个函数,给定一个八进制数字的整数,它将把它作为八进制读入,并将它转换成十进制

例如:

// oct2dec(777) = 511
// oct2dec(10) = 8

func oct2dec(octal : Int) -> Int {
    // what goes here?
}

在我的选项中,使用字符串转换函数非常可怕。不如换成这样:

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

在我的选项中,使用字符串转换函数非常可怕。不如换成这样:

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本机和初始值设定项(|)


对于您的特定用例:

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)
}
只需使用Swift本机和初始值设定项(|)


对于您的特定用例:

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)
}

您不应该认为
Int
具有任何特定的基数。在内存中,无论如何,它总是二进制的。在您的示例中,
777
是十进制的
777
1411
是八进制的,
1100001001
是二进制的,所有这些都是同时进行的。它不需要“转换”成八进制;你所需要做的就是确保字符串转换被告知使用哪个基数。你不应该认为
Int
有任何特定的基数。在内存中,无论如何,它总是二进制的。在您的示例中,
777
是十进制的
777
1411
是八进制的,
1100001001
是二进制的,所有这些都是同时进行的。它不需要“转换”成八进制;你需要做的就是确保字符串转换被告知使用哪种基数。奇怪的是,我链接的
string.init(:radix:)
的Swift文档声称它是在Xcode 9中引入的,有很多人使用它,所以它一定比Swift 4早。奇怪的是,我提交了
string.init(:radix:)的Swift文档
我链接的声明是在Xcode 9中引入的,有很多人使用它,所以它一定比Swift 4旧。我已经提交了此文件,这是不必要的,因为此问题有标准库解决方案这是不必要的,因为此问题有标准库解决方案