You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 00:22:10