-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathDatas.swift
42 lines (32 loc) · 961 Bytes
/
Datas.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//
// Datas.swift
// PotentCodables
//
// Copyright © 2021 Outfox, inc.
//
//
// Distributed under the MIT License, See LICENSE for details.
//
import Foundation
extension Data {
func hexEncodedString() -> String {
return reduce("") {$0 + String(format: "%02x", $1)}
}
init(hexEncoded: String) {
let chars = Array(hexEncoded.utf8)
var bytes = [UInt8]()
bytes.reserveCapacity(chars.count / 2)
let map: [UInt8] = [
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, // 01234567
0x08, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 89:;<=>?
0x00, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x00, // @ABCDEFG
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // HIJKLMNO
]
for i in stride(from: 0, to: chars.count, by: 2) {
let index1 = Int(chars[i] & 0x1F ^ 0x10)
let index2 = Int(chars[i + 1] & 0x1F ^ 0x10)
bytes.append(map[index1] << 4 | map[index2])
}
self.init(bytes)
}
}