斯威夫特|获取结构体内部的c char数组的指针

时间:2019-07-19 21:15:45

标签: c objective-c swift

我正在尝试将一些旧的ObjC代码转换为Swift,关于指针,我在Swift方面做得还不够。

原始的ObjC / C代码:

unsigned char myId[6];
memcpy(myId, packet.header->m1, 6);

原始C结构:

typedef struct {
    unsigned char m1[6];
    unsigned char m2[6];
} __attribute__((__packed__)) HeaderStruct;

我尝试过的Swift代码不起作用:

var myId = [CUnsignedChar](repeating: 0, count: 6)
var headerStruct: UnsafePointer<HeaderStruct> = packet!.header()
memcpy(&myId, headerStruct.pointee.m1, 6)

headerStruct.pointee.m1

有关的错误
  

无法转换类型'(UInt8,UInt8,UInt8,UInt8,UInt8,   UInt8)”更改为预期的参数类型“ UnsafeRawPointer?”

我假设我需要基地址(headerStruct)并添加m1的偏移量,但是我该怎么做?

1 个答案:

答案 0 :(得分:3)

一个C数组作为元组导入到Swift中。但是内存布局得以保留,因此您可以获得指向元组存储的指针,并将其“绑定”为指向UInt8值的指针:

let myId = withUnsafeBytes(of: headerStruct.pointee.m1) {
    Array($0.bindMemory(to: UInt8.self))
}