将数据扩展转换为Swift 3.1和UnsafeRawPointer时出现问题
我正在将swift 2.3项目更新为3.1,在转换此功能时遇到了问题,特别是在一行上 这是数据的扩展将数据扩展转换为Swift 3.1和UnsafeRawPointer时出现问题,swift,swift3,unsafe-pointers,Swift,Swift3,Unsafe Pointers,我正在将swift 2.3项目更新为3.1,在转换此功能时遇到了问题,特别是在一行上 这是数据的扩展 public func read<T: BinaryReadable>(offset f_offset: inout Int, byteOrder: ByteOrder = .HostByteOrder) -> T? { // Validate the specified offset bounda
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
}
public func read(偏移量f\u偏移量:inout Int,
字节顺序:字节顺序=.HostByteOrder)->T?{
//验证指定的偏移边界。
guard self.count>=(f_偏移量+MemoryLayout.size)else{
归零
}
//让dataPtr=Unsas
//在偏移位置获取数据指针。
//转换这条线路有困难吗
让dataPtr=UnsafePointer(字节).advancedBy(f_偏移量)
//增加偏移位置。
f_offset+=内存长度
//从偏移位置读取数据,并以指定的尾数返回。
让retVal=UnsafeRawPointer(dataPtr).load(as:T.self)
return(字节顺序==.littleEndian)?retVal.littleEndian:retVal.bigEndian
}
我好像听不到电话
let dataPtr = UnsafePointer<UInt8>(bytes).advancedBy(f_offset)
let dataPtr=UnsafePointer(字节)。advancedBy(f_偏移量)
要转换为使用UnsafeRawPointer。我尝试了太多的方法在这里列出,但没有成功(编译错误)
正确的语法是什么?数据的方法withUnsafeBytes()
允许访问字节,
而UnsafeRawPointer
的load()
方法采用可选的字节偏移量参数:
let retVal = self.withUnsafeBytes {
UnsafeRawPointer($0).load(fromByteOffset: f_offset, as: T.self)
}
但请注意,这假设(与您的原始代码一样)
类型T
的内存地址正确对齐