import Foundation extension Data { var bytes : [UInt8]{ return [UInt8](self) } } extension Data { struct HexEncodingOptions: OptionSet { let rawValue: Int static let upperCase = HexEncodingOptions(rawValue: 1 << 0) } func hexEncodedString(options: HexEncodingOptions = []) -> String { let format = options.contains(.upperCase) ? "%02hhX" : "%02hhx" return map { String(format: format, $0) }.joined() } } extension Data { var hexDescription: String { return reduce("") {$0 + String(format: "%02x", $1)} } var binaryDescription: String { return reduce("") {$0 + String(format: "%0b", $1)} } } extension Data { var format: String { let array = [UInt8](self) let ext: String switch (array[0]) { case 0xFF: ext = "jpg" case 0x89: ext = "png" case 0x47: ext = "gif" case 0x49, 0x4D : ext = "tiff" default: ext = "unknown" } return ext } }