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. 影像质量是指对...
    我们村我最帅阅读 4,022评论 0 8
  • 1. 关于诊断X线机准直器的作用,错误的是()。 (6.0 分) A. 显示照射野 B. 显示中心线 C. 屏蔽多...
    我们村我最帅阅读 10,848评论 0 5
  • 201. M-Q型显影液组合是()。 (2.0 分) A. 米吐尔与菲尼酮的组合 B. 对苯二酚和菲尼酮的组合 C...
    我们村我最帅阅读 3,679评论 0 4
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,975评论 6 342
  • Ui 设计师在设计网页的时候,在设计网页banner高度的时候,应该规范第一屏的最大可视区域的宽度和高度是多少? ...
    张云钱阅读 6,456评论 1 1