我正在尝试将一些旧的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的偏移量,但是我该怎么做?
答案 0 :(得分:3)
一个C数组作为元组导入到Swift中。但是内存布局得以保留,因此您可以获得指向元组存储的指针,并将其“绑定”为指向UInt8
值的指针:
let myId = withUnsafeBytes(of: headerStruct.pointee.m1) {
Array($0.bindMemory(to: UInt8.self))
}