Newer Older
58 lines | 1.511kb
Bogdan Timofte authored 2 weeks ago
1
//
2
//  Data.swift
3
//  USB Meter
4
//
5
//  Created by Bogdan Timofte on 08/03/2020.
6
//  Copyright © 2020 Bogdan Timofte. All rights reserved.
7
//
8

            
9
import Foundation
10

            
11
extension Data {
12

            
13
    var hexEncodedStringValue : String {
14
        get{
15
            return map { String(format: "%02hhx", $0) }.joined()
16
        }
17
    }
18
//Ceva mostenit
19
//    init<T>(from value: T) {
20
//        var value = value
21
//        self.init(buffer: UnsafeBufferPointer(start: &value, count: 1))
22
//    }
23

            
24
    func value<T>(from: Int) -> T {
25
        let to = from + MemoryLayout<T>.size
26
        //track("size: \(self.count) from:\(from) to:\(to)")
27
        return self.subdata(in: from..<to).withUnsafeBytes { $0.load(as: T.self) }
28
    }
29

            
30
    func value<T>() -> T {
31
        return self.withUnsafeBytes { $0.load(as: T.self) }
32
    }
33

            
34
    func subdata(in range: ClosedRange<Index>) -> Data {
35
        return subdata(in: range.lowerBound ..< range.upperBound)
36
    }
37

            
38
    func subdata(from: Int, length: Int) -> Data {
39
        return subdata(in: self.startIndex + from ..< self.startIndex.advanced(by: from + length))
40
    }
41

            
42
    func subdata(from: Int, to: Int) -> Data {
43
        return subdata(in: self.startIndex + from ... self.startIndex.advanced(by: to))
44
    }
45

            
46

            
47
    var utf8String: String {
48
        return string(as: .utf8)
49
    }
50

            
51
    var asciiString: String {
52
        return string(as: .ascii)
53
    }
54

            
55
    func string(as encoding: String.Encoding) -> String {
56
        return String(data: self, encoding: encoding) ?? ""
57
    }
58
}