30

我正在寻找一种在 Swift 中将二进制数转换为十进制的简单方法。例如,二进制的“10”变成十进制的“2”。

谢谢,

4

4 回答 4

50

Swift 2更新:所有整数类型都有一个

public init?(_ text: String, radix: Int = default)

now 方法,它根据给定的基数将字符串转换为整数:

let binary = "11001"
if let number = Int(binary, radix: 2) { 
    print(number) // Output: 25
}

(上一个答案:)您可以简单地使用 BSD 库函数strtoul(),它根据给定的基数将字符串转换为数字:

let binary = "11001"
let number = strtoul(binary, nil, 2)
println(number) // Output: 25
于 2014-11-07T22:11:30.330 回答
22

更新:Xcode 7.2 • Swift 2.1.1

您可以使用名为 strtoul 的 C++ 函数实现 Martin R's Answer 进行扩展,如下所示:

extension String {
    var hexaToInt      : Int    { return Int(strtoul(self, nil, 16))      }
    var hexaToDouble   : Double { return Double(strtoul(self, nil, 16))   }
    var hexaToBinary   : String { return String(hexaToInt, radix: 2)      }
    var decimalToHexa  : String { return String(Int(self) ?? 0, radix: 16)}
    var decimalToBinary: String { return String(Int(self) ?? 0, radix: 2) }
    var binaryToInt    : Int    { return Int(strtoul(self, nil, 2))       }
    var binaryToDouble : Double { return Double(strtoul(self, nil, 2))   }
    var binaryToHexa   : String { return String(binaryToInt, radix: 16)  }
}

extension Int {
    var binaryString: String { return String(self, radix: 2)  }
    var hexaString  : String { return String(self, radix: 16) }
    var doubleValue : Double { return Double(self) }
}

"ff".hexaToInt              // "255"
"ff".hexaToDouble           // "255.0"
"ff".hexaToBinary           // "11111111"
"255".decimalToHexa         // "ff"
"255".decimalToBinary       // "11111111"
"11111111".binaryToInt      // "255"
"11111111".binaryToDouble   // "255.0"
"11111111".binaryToHexa     // "ff"
255.binaryString            // "11111111"
255.hexaString              // "ff"
255.doubleValue             // 255.0
于 2014-11-07T22:44:50.640 回答
4

二进制文件是 swift 内置的,使用 0b 前缀

println( 0b11001 ) // Output: 25
于 2014-12-10T09:27:17.313 回答
2

可能有一个内置函数可以做到这一点,但自己编写代码并不难:

func parseBinary(binary: String) -> Int? {
    var result: Int = 0

    for digit in binary {
        switch(digit) {
            case "0": result = result * 2
            case "1": result = result * 2 + 1
            default: return nil
        }
    }
    return result
}

该函数返回一个(可选)Int。如果您想获取字符串,可以执行以下操作:

String(parseBinary("10101")!)
-> "21"

请注意强制展开 (!) 如果您提供的字符串包含除 0 或 1 以外的任何内容,则该函数将返回 nil,并且此表达式将崩溃。

或者,从 Leonardo 那里得到启发,您可以将其构建为字符串的扩展:

extension String {
    func asBinary() -> Int? {
        var result: Int = 0

        for digit in self {
            switch(digit) {
                case "0": result = result * 2
                case "1": result = result * 2 + 1
                default: return nil
            }
        }
        return result
    }
}

"101".asBinary()!
-> 5
于 2014-11-07T00:01:39.917 回答