memcpy与swift中的struct的偏移量

时间:2017-09-27 00:59:24

标签: swift struct bluetooth memcpy

我收到分裂超过3个数据包的打包结构的蓝牙数据,其中每个数据包的第一个字节是此数据包的数量,其余数据是数据。我正在使用下一个代码来组装stuct:

func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {
       guard let value = characteristic.value as NSData? else { return }

       var packetNumber = UInt8()
       let maxPacketSize = 17

       value.getBytes(&packetNumber, length: 1)

       memcpy(&settings + maxPacketSize * (Int(packetNumber) - 1), value.bytes + 1, value.length - 1)
}

它适用于第一个数据包,但第二个和第三个数据包不会复制到结构,它仍然由零填充。 objc中的相同方法适用于所有3个数据包。有什么问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

经过一些实验,我能够找到有效的代码:

        let destination: UnsafeMutableRawPointer = &settings + maxPacketSize * (Int(packetNumber) - 1)
        memcpy(destination, value.bytes + 1, value.length - 1)

看起来没有明确声明UnsafeMutableRawPointer它只创建了UnsafeRawPointer。有趣的是,它只是在增加抵消的情况下。