Created
August 3, 2020 14:21
-
-
Save strzempa/7f759adb450773020d139276b3d3188b to your computer and use it in GitHub Desktop.
converting string to hex and back
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import Foundation | |
enum HexUidConverter { | |
static func hexString(from uid: String) -> String { | |
Data(uid.utf8).hexEncodedString() | |
} | |
static func uid(from hexString: String) -> String? { | |
guard let data = Data(hexString: hexString) else { | |
return nil | |
} | |
return String(data: data, encoding: .utf8) | |
} | |
} | |
private extension Data { | |
init?(hexString: String) { | |
let length = hexString.count / 2 | |
var data = Data(capacity: length) | |
for i in 0 ..< length { | |
let j = hexString.index(hexString.startIndex, offsetBy: i * 2) | |
let k = hexString.index(j, offsetBy: 2) | |
let bytes = hexString[j..<k] | |
if var byte = UInt8(bytes, radix: 16) { | |
data.append(&byte, count: 1) | |
} else { | |
return nil | |
} | |
} | |
self = data | |
} | |
func hexEncodedString() -> String { | |
return map { String(format: "%02hhx", $0) }.joined() | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment