withMemoryRebound 与 Apples Swift 3 beta 6 的用法
Usage of withMemoryRebound with Apples Swift 3 beta 6
我有以下问题。我想转换我的旧功能(一直工作到 Swift 3 beta 5):
func binarytotype <T> (_ value: [UInt8], _: T.Type) -> T
{
return value.withUnsafeBufferPointer
{
return UnsafePointer<T>([=11=].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>([=13=]), count: MemoryLayout<T>.size))
}
}
这也不再起作用了。同样的问题。我的一些项目都需要两者。这个反向函数被称为:
var binary: [UInt8] = typetobinary(number)
自 Xcode 8 beta 6 以来,现在指针转换 "verbose" 多了。
这是一个可能的解决方案:
func binarytotype <T> (_ value: [UInt8], _: T.Type) -> T {
return value.withUnsafeBufferPointer {
UnsafeRawPointer([=10=].baseAddress!).load(as: T.self)
}
}
func typetobinary<T>(_ value: T) -> [UInt8] {
var data = [UInt8](repeating: 0, count: MemoryLayout<T>.size)
data.withUnsafeMutableBufferPointer {
UnsafeMutableRawPointer([=10=].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.
我有以下问题。我想转换我的旧功能(一直工作到 Swift 3 beta 5):
func binarytotype <T> (_ value: [UInt8], _: T.Type) -> T
{
return value.withUnsafeBufferPointer
{
return UnsafePointer<T>([=11=].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>([=13=]), count: MemoryLayout<T>.size))
}
}
这也不再起作用了。同样的问题。我的一些项目都需要两者。这个反向函数被称为:
var binary: [UInt8] = typetobinary(number)
自 Xcode 8 beta 6 以来,现在指针转换 "verbose" 多了。 这是一个可能的解决方案:
func binarytotype <T> (_ value: [UInt8], _: T.Type) -> T {
return value.withUnsafeBufferPointer {
UnsafeRawPointer([=10=].baseAddress!).load(as: T.self)
}
}
func typetobinary<T>(_ value: T) -> [UInt8] {
var data = [UInt8](repeating: 0, count: MemoryLayout<T>.size)
data.withUnsafeMutableBufferPointer {
UnsafeMutableRawPointer([=10=].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.