Swift で 2 進数を 10 進数に変換する簡単な方法を探しています。たとえば、2 進数の「10」は 10 進数の「2」になります。
ありがとう、
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
更新: 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
バイナリは0bプレフィックスを使用してswiftに組み込まれています
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