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

如何将BitArray转换为Data?是否需替换为[UInt8]?

解决BitArray转Data的两种方案
  • 直接替换为[UInt8](最省心)
    如果项目中BitArray的使用范围不大,直接换成[UInt8]是最直接的方案。因为Data可以直接通过Data(bytes: yourUInt8Array)初始化,拿到的Data就能直接传入writeValue(_:for:type:)方法,不需要额外写转换逻辑。

  • 给BitArray实现转Data的方法(保留原有结构)
    要是项目里已经大量使用BitArray,不想大规模修改代码,可以给BitArray加个扩展来实现转Data的逻辑。假设你的BitArray是按单个比特存储元素的,参考下面的实现:

    extension BitArray {
        var data: Data {
            var bytes = [UInt8]()
            var currentByte: UInt8 = 0
            var bitPosition = 0
            
            for isSet in self {
                if isSet {
                    currentByte |= 1 << (7 - bitPosition)
                }
                bitPosition += 1
                if bitPosition == 8 {
                    bytes.append(currentByte)
                    currentByte = 0
                    bitPosition = 0
                }
            }
            // 处理最后不足8位的剩余比特
            if bitPosition > 0 {
                bytes.append(currentByte)
            }
            return Data(bytes)
        }
    }
    

    之后直接调用yourBitArray.data就能得到符合要求的Data,传入目标方法即可。如果你的BitArray内部本身就是用[UInt8]存储的(比如部分第三方库的实现),直接取内部的数组转Data就行,不用重新打包。

内容的提问来源于stack exchange,提问作者Roman Podymov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:42:04