withMemoryRebound与苹果Swift 3 beta 6一起使用

我有以下问题.我想转换我的旧功能(工作直到 Swift 3 beta 5):
func binarytotype <T> (_ value: [UInt8],_: T.Type) -> T
{
    return value.withUnsafeBufferPointer
    {
        return UnsafePointer<T>($0.baseAddress!).pointee
    }
}

到Swift 3 beta 6语法.此函数将UInt8数组转换为另一种类型,例如:

let b: [UInt8] = [1,2,3,4,5,6,7,8]
var number: Double = binarytotype(b,Double.self)

但是现在这在beta 6中不再起作用了,我必须使用withMemoryRebound,但我真的不知道,如何让它运行.有谁能够帮我?

相反的功能是:

func typetobinary <T> (_ value: T) -> [UInt8]
{
    var v: T = value
    return withUnsafePointer(to: &v)
    {
        Array(UnsafeBufferPointer(start: UnsafePointer<UInt8>($0),count: MemoryLayout<T>.size))
    }
}

这也不再适用.同样的问题.我的一些项目都需要这两个项目.这个反向函数被称为:

var binary: [UInt8] = typetobinary(number)
自Xcode 8 beta 6以来,指针转换现在更加“冗长”.
这是一个可能的解决方案:
func binarytotype <T> (_ value: [UInt8],_: T.Type) -> T {
    return value.withUnsafeBufferPointer {
        UnsafeRawPointer($0.baseAddress!).load(as: T.self)
    }
}

func typetobinary<T>(_ value: T) -> [UInt8] {
    var data = [UInt8](repeating: 0,count: MemoryLayout<T>.size)
    data.withUnsafeMutableBufferPointer {
        UnsafeMutableRawPointer($0.baseAddress!).storeBytes(of: value,as: T.self)
    }
    return data
}

例:

let d = typetobinary(UInt16(1000))
print(d) // [232,3]
let i = binarytotype(d,UInt16.self)
print(i) // 1000

请参阅SE-0107 UnsafeRawPointer API有关新原始指针API的详细信息.

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...