Newer Older
57 lines | 1.45kb
Bogdan Timofte authored 2 months 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
        return self.subdata(in: from..<to).withUnsafeBytes { $0.load(as: T.self) }
27
    }
28

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

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

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

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

            
45

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

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

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