我正在寻找一种在 Swift 中将二进制数转换为十进制的简单方法。例如,二进制的“10”变成十进制的“2”。
谢谢,
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
更新: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
二进制文件是 swift 内置的,使用 0b 前缀
println( 0b11001 ) // Output: 25
可能有一个内置函数可以做到这一点,但自己编写代码并不难:
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