如何在Swift中将二进制转换为十进制?
我正在寻找一种简单的方法来转换一个二进制数在十进制的Swift。例如,二进制中的“10”变成十进制中的“2”如何在Swift中将二进制转换为十进制?,swift,swift2,Swift,Swift2,我正在寻找一种简单的方法来转换一个二进制数在十进制的Swift。例如,二进制中的“10”变成十进制中的“2” 谢谢,这可能有一个内置的方法,但是自己编写代码并不难: func parseBinary(binary: String) -> Int? { var result: Int = 0 for digit in binary { switch(digit) { case "0": result = result * 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,此表达式将爆炸
或者,借鉴莱昂纳多的经验,您可以将其构建为字符串的扩展:
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
更新Swift 2:所有整数类型都有一个
public init?(_ text: String, radix: Int = default)
方法,该方法根据
给定的基数:
let binary = "11001"
if let number = Int(binary, radix: 2) {
print(number) // Output: 25
}
let binary = "11001"
let number = strtoul(binary, nil, 2)
println(number) // Output: 25
(前面的答案:)您只需使用BSD库函数
strtoul()
,它将字符串转换为
根据给定基数的数字:
let binary = "11001"
if let number = Int(binary, radix: 2) {
print(number) // Output: 25
}
let binary = "11001"
let number = strtoul(binary, nil, 2)
println(number) // Output: 25
更新:Xcode 7.2•Swift 2.1.1
可以用C++调用Struts函数实现Martin R的回答,扩展如下:
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
二进制文件使用0b前缀内置到swift
println( 0b11001 ) // Output: 25
不重复;相反:发布您的Swift代码,保留您不知道如何执行的位。您有什么二进制表示法?与其他解决方案一样有趣,使用lib是正确的答案。您能告诉我如何对非常大的二进制字符串执行此操作吗。例如,像这样的二进制字符串:“100110111110101110010110010011011101110110001001111001111111111111111111011011011100111001100011111010”。当前解决方案无法转换这个相当长的数字。@SalehMasum:Swift中最大的整数类型是UInt64。没有可以容纳100位数字的整数类型。您可以将字符串拆分为较小的块,或者查找“大整数”库。@MartinR谢谢您的解释。现在我明白它为什么不起作用了。我需要看看像BigInteger这样的东西。