Swift3 Base64,Float,Byte相關編碼與轉換

    ///Base64編碼
    static func encodeBase64(_ s:String) -> String {
        return (s.data(using: .utf8)!.base64EncodedString())
    }
    
    ///Base64解碼
    static func decodeBase64(_ s:String) -> String {
        return String(data: Data(base64Encoded: s)!, encoding: .utf8)!
    }
    
    ///Base64轉Float數組
    static func string2Floats(_ s:String) -> [Float] {
        //String轉[UInt8]
        let bs = [UInt8](Data(base64Encoded: s)!)
        //[UInt8]轉[Float]
        return Bytes2Floats(bs)
    }
    
    ///Float數組轉Base64
    static func floats2String(_ fs:[Float]) -> String {
        //[Float]轉[UInt8]
        let bs = Floats2Bytes(fs)
        //[UInt8]轉String
        return Data(bytes: bs).base64EncodedString()
    }
    
    ///Byte數組轉Float數組
    static func Bytes2Floats(_ bs:[UInt8]) -> [Float] {
        var fs = [Float]()
        for i in 0 ..< bs.count/4 {
            let arr = Array(bs[4*i ..< 4*i+4])
            var f:Float = 0
            memcpy(&f, arr, 4)
            fs.append(f)
        }
        return fs
    }
    
    ///Float數組轉Byte數組
    static func Floats2Bytes(_ fs: [Float]) -> [UInt8] {
        var bs = [UInt8]()
        for var f in fs {
            bs += withUnsafePointer(to: &f) {
                $0.withMemoryRebound(to: UInt8.self, capacity: 4) {
                    Array(UnsafeBufferPointer(start: $0, count: 4))
                }
            }
        }
        return bs
    }

    ///四位Byte轉Float
    static func Bytes2Float(_ bs:[UInt8]) -> Float {
        var f:Float = 0.0
        memcpy(&f, bs, 4)
        return f
    }
    
    ///Float轉四位Byte
    static func Float2Bytes(_ value: Float) -> [UInt8] {
        var value = value
        let size = MemoryLayout<Float>.size
        return withUnsafePointer(to: &value) {
            $0.withMemoryRebound(to: UInt8.self, capacity: size) {
                Array(UnsafeBufferPointer(start: $0, count: size))
            }
        }
    }

主要參考自StackOverflow

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1. 下列敘述錯誤的是()。 (2.0 分) A. 質量管理包括QA和QC一切活動的全部過程 B. 影像質量是指對...
    我們村我最帥閱讀 3,973評論 0 8
  • 1. 關于診斷X線機準直器的作用,錯誤的是()。 (6.0 分) A. 顯示照射野 B. 顯示中心線 C. 屏蔽多...
    我們村我最帥閱讀 10,832評論 0 5
  • 201. M-Q型顯影液組合是()。 (2.0 分) A. 米吐爾與菲尼酮的組合 B. 對苯二酚和菲尼酮的組合 C...
    我們村我最帥閱讀 3,647評論 0 4
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,958評論 6 342
  • Ui 設計師在設計網頁的時候,在設計網頁banner高度的時候,應該規范第一屏的最大可視區域的寬度和高度是多少? ...
    張云錢閱讀 6,434評論 1 1