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

iOS中如何将Data转换为支持负数的有符号Int8?

解决Swift中Data转Int8数组的问题

你遇到的错误是因为Swift没有直接提供从Data到[Int8]的初始化器,Data默认的元素类型是UInt8,可以通过以下两种方式完成转换:

方法一:内存绑定(高效推荐)

通过withUnsafeBytes直接访问Data的内存缓冲区,将其绑定到Int8类型,这种方式无需额外内存复制,效率更高:

class ViewController: UIViewController {
    let data: Data? = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()

        guard let data = data else { return }

        let int8Array = data.withUnsafeBytes { buffer in
            Array(buffer.bindMemory(to: Int8.self))
        }
        
        int8Array.forEach { print("--Doing stuff here", $0) }
    }
}

方法二:先转UInt8数组再映射

先将Data转为[UInt8],再通过map将每个元素转换为Int8,这种方式更直观,但会产生一次数组复制:

class ViewController: UIViewController {
    let data: Data? = nil
    
    override func viewDidLoad() {
        super.viewDidLoad()

        guard let data = data else { return }

        let int8Array = [UInt8](data).map(Int8.init)
        
        int8Array.forEach { print("--Doing stuff here", $0) }
    }
}

两种方式都能实现和Kotlin中ByteArray(有符号Int8)对应的效果,转换后的Int8数组可正确处理-128到127的负数取值范围。

内容的提问来源于stack exchange,提问作者Joakim Sjöstedt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:00:59