Как преобразовать двоичный файл в десятичный в Swift?
Я ищу простой способ преобразования двоичного числа в десятичное в Swift. Например, "10" в двоичном виде становится "2" в десятичном.
Спасибо,
4 ответа
Обновление для 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
Вы можете реализовать ответ Martin R, создав расширение, используя функцию C++, называемую strtoul, следующим образом:
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, и это выражение будет взорвано.
Или, пользуясь репликой Леонардо, вы можете построить это как расширение строки:
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