swift Swift数据扩展,支持将数据转换为十六进制呈现的字符串,并通过十六进制字符串构造数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了swift Swift数据扩展,支持将数据转换为十六进制呈现的字符串,并通过十六进制字符串构造数据相关的知识,希望对你有一定的参考价值。

import Foundation

extension Data {
    func hexDescription() -> String {
        return map { String(format: "%02X", $0) }
            .joined(separator: "")
    }
    
    init?(hexString:String) {
        // Convert 0 ... 9, a ... f, A ...F to their decimal value,
        // return nil for all other input characters
        func decodeNibble(_ u: UInt16) -> UInt8? {
            switch(u) {
            case 0x30 ... 0x39:
                return UInt8(u - 0x30)
            case 0x41 ... 0x46:
                return UInt8(u - 0x41 + 10)
            case 0x61 ... 0x66:
                return UInt8(u - 0x61 + 10)
            default:
                return nil
            }
        }
        
        let utf16 = hexString.utf16
        var bytes:[UInt8] = []
        
        var i = utf16.startIndex
        
        while i != utf16.endIndex {
            guard let hi = decodeNibble(utf16[i]),
                let loIndex = utf16.index(i, offsetBy: 1, limitedBy: utf16.endIndex),
                let lo = decodeNibble(utf16[loIndex])
                else {
                    return nil
            }
            let value = hi << 4 + lo
            bytes.append(value)
            i = utf16.index(i, offsetBy: 2, limitedBy: utf16.endIndex) ?? utf16.endIndex
        }
        self.init(bytes: bytes)
    }
}

以上是关于swift Swift数据扩展,支持将数据转换为十六进制呈现的字符串,并通过十六进制字符串构造数据的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 无法将核心数据转换为 url 参数

Swift 类型转换

Swift 3 将数据转换为 AVAsset 或 PHAsset

如何将 json 数据从 alamofire 转换为 swift 对象

Swift - NSJsonSerialization - “无法将数据转换为围绕字符的字符串”错误

如何在 Swift 中将 JSON 转换为数据类型?