import Foundation
func binaryToByteArray(_ binaryString: String) throws -> [UInt8] {
guard binaryString.count % 8 == 0 else {
throw NSError(domain: "BinaryError", code: 1, userInfo: [NSLocalizedDescriptionKey: "Binary string length must be a multiple of 8."])
}
var byteArray: [UInt8] = []
for i in stride(from: 0, to: binaryString.count, by: 8) {
let startIndex = binaryString.index(binaryString.startIndex, offsetBy: i)
let endIndex = binaryString.index(startIndex, offsetBy: 8)
let byteString = String(binaryString[startIndex..<endIndex])
if let byte = UInt8(byteString, radix: 2) {
byteArray.append(byte)
} else {
throw NSError(domain: "ConversionError", code: 2, userInfo: [NSLocalizedDescriptionKey: "Invalid binary segment: \(byteString)"])
}
}
return byteArray
}
let binaryString = "10101110111010101110101001001011"
do {
let byteList = try binaryToByteArray(binaryString)
print("Byte List:", byteList.map { String($0) }.joined(separator: " "))
} catch {
print("Error: \(error.localizedDescription)")
}
/*
run:
Byte List: 174 234 234 75
*/