Convert a String to binary in swift?
Solution 1
Use func data(using encoding: String.Encoding, allowLossyConversion: Bool = default) -> Data?
Example:
Swift 5
let string = "The string"
let binaryData = Data(string.utf8)
Swift 3
let string = "The string"
let binaryData: Data? = string.data(using: .utf8, allowLossyConversion: false)
EDIT: Or wait, do you need binary representation of you data or string of 0/1?
EDIT: For string of 0/1 use something like:
let stringOf01 = binaryData?.reduce("") { (acc, byte) -> String in
acc + String(byte, radix: 2)
}
EDIT: Swift 2
let binaryData = str.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
Solution 2
Swift 5:
This will add a String Extension
extension String {
func stringToBinary() -> String {
let st = self
var result = ""
for char in st.utf8 {
var tranformed = String(char, radix: 2)
while tranformed.count < 8 {
tranformed = "0" + tranformed
}
let binary = "\(tranformed) "
result.append(binary)
}
return result
}
}
This is going to return a string of 0s and 1s separated by spaces. You can modify it to return an array if needed.
Implementation:
let string = "Hello World"
let newString = string.stringToBinary()
Solution 3
For Swift 5, you can add a String Extension like that:
extension String {
var hexaToBinary: String {
return hexaToBytes.map {
let binary = String($0, radix: 2)
return repeatElement("0", count: 8-binary.count) + binary
}.joined()
}
private var hexaToBytes: [UInt8] {
var start = startIndex
return stride(from: 0, to: count, by: 2).compactMap { _ in
let end = index(after: start)
defer { start = index(after: end) }
return UInt8(self[start...end], radix: 16)
}
}
}
AMAN77
I mainly develop software in Objective-C and Swift on the X-code IDE for Apple devices. Its a great environment and language that can be super challenging and keep peeking interest on a daily basis. I would encourage anyone who is thinking about going in this direction to persist further as the rewards are outstanding! Happy Coding :D
Updated on July 12, 2022Comments
-
AMAN77 almost 2 years
Is there a way to convert a string to binary in Swift?
Found this link on SO but it only handles converting decimals. I'm trying to convert special characters and letters as well.
Tried building an array of known ASCII characters and comparing them(worked for letters) but ran into problems comparing the special characters.
Appreciating your responses.