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)} } }