Swiftで2進数を10進数に変換する簡単な方法を探しています。たとえば、2進数の「10」は10進数の「2」になります。
ありがとう、
Updatefor Swift 2:すべての整数型には
_public init?(_ text: String, radix: Int = default)
_
与えられた基数に従って文字列を整数に変換する今のメソッド:
_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
_
更新:Xcode7.2•Swift 2.1.1
次のように、strtoulと呼ばれるC++関数を使用して拡張機能を作成するMartinR'sAnswerを実装できます。
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
これを行うための組み込みが存在する可能性がありますが、自分でコードを書くことは難しくありません。
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
バイナリはSwift 0bプレフィックスを使用して)に組み込まれています
println( 0b11001 ) // Output: 25