gpt4 book ai didi

swift - 将数据扩展转换为 Swift 3.1 和 UnsafeRawPointer 时遇到问题

转载 作者:行者123 更新时间:2023-11-28 06:21:23 25 4
gpt4 key购买 nike

我正在将一个 swift 2.3 项目更新到 3.1,我在转换这个函数时遇到了问题,特别是在一行中。

这是数据的扩展。

public func read<T: BinaryReadable>(offset f_offset: inout Int,
byteOrder: ByteOrder = .HostByteOrder) -> T? {
// Validate the specified offset boundary.
guard self.count >= (f_offset + MemoryLayout<T>.size) else {
return nil
}

//let dataPtr = Unsas
// Get data pointer at offset location.

// TROUBLE CONVERTING THIS LINE
let dataPtr = UnsafePointer<UInt8>(bytes).advancedBy(f_offset)

// Increment the offset position.
f_offset += MemoryLayout<T>.size

// Read data from offset location and return in specified endianess.
let retVal = UnsafeRawPointer(dataPtr).load(as: T.self)
return (byteOrder == .littleEndian) ? retVal.littleEndian : retVal.bigEndian
}

我好像听不到电话

let dataPtr = UnsafePointer<UInt8>(bytes).advancedBy(f_offset)

转换为使用 UnsafeRawPointer。我已经尝试了太多,无法在此处列出,但都没有成功(编译错误)。

什么是正确的语法?

最佳答案

DatawithUnsafeBytes() 方法可以访问字节,UnsafeRawPointerload() 方法接受一个可选的字节偏移量参数:

let retVal = self.withUnsafeBytes {
UnsafeRawPointer($0).load(fromByteOffset: f_offset, as: T.self)
}

但请注意,这假定(与您的原始代码一样)内存地址已针对 T 类型正确对齐。

关于swift - 将数据扩展转换为 Swift 3.1 和 UnsafeRawPointer 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43325857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com