web-dev-qa-db-ja.com

Swiftで2進数を10進数に変換する方法は?

Swiftで2進数を10進数に変換する簡単な方法を探しています。たとえば、2進数の「10」は10進数の「2」になります。

ありがとう、

15

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
_
30
Martin R

更新: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
17
Leo Dabus

これを行うための組み込みが存在する可能性がありますが、自分でコードを書くことは難しくありません。

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
2
Todd Agulnick

バイナリはSwift 0bプレフィックスを使用して)に組み込まれています

println( 0b11001 ) // Output: 25
0
jeff-ziligy