Objective-C转Swift:NSData转Byte指针的等效实现方法咨询
Objective-C转Swift:字节指针操作的等效写法
原Objective-C代码的作用是获取NSData对象内部的字节缓冲区指针,其中Byte是UInt8的别名,本质是拿到指向原始字节的UInt8*指针。
正确的Swift等效写法
根据你使用的是NSData还是Swift原生Data类型,有两种常用写法:
1. 获取UInt8类型指针(对应OC的Byte*)
如果需要直接操作指针:
// 假设getUcTime返回NSData,转成Swift的Data更方便 let ucTimeData = self.getUcTime() as Data let ucTimeByte = ucTimeData.withUnsafeBytes { buffer in buffer.baseAddress!.assumingMemoryBound(to: UInt8.self) }
如果坚持使用NSData:
let ucTimeData = self.getUcTime() let ucTimeByte = ucTimeData.bytes.assumingMemoryBound(to: UInt8.self)
2. 直接转为字节数组(Swift更推荐的安全写法)
如果不需要直接操作指针,只是需要获取所有字节,直接转成[UInt8]数组更符合Swift的安全范式:
let ucTimeData = self.getUcTime() as Data let ucTimeBytes = [UInt8](ucTimeData) // 此时ucTimeBytes就是[0x9E, 0xA4, 0x9C, 0x1D],对应你打印的<9ea49c1d>
你之前写法错误的原因
你尝试的let ucTimeByte: UInt8 = UInt8(ucTimeData.bytes)是错误的,因为bytes返回的是指针地址(一个内存地址值),不是单个字节数据,无法直接转换为UInt8类型的字节值。
内容的提问来源于stack exchange,提问作者Notsileous
相关产品推荐
相关产品推荐

