gpt4 book ai didi

c - swift |获取struct中c char数组的指针

转载 作者:太空宇宙 更新时间:2023-11-04 06:46:42 28 4
gpt4 key购买 nike

我正在尝试将一些旧的 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的错误

Cannot convert value of type '(UInt8, UInt8, UInt8, UInt8, UInt8, UInt8)' to expected argument type 'UnsafeRawPointer?'

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

最佳答案

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

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

关于c - swift |获取struct中c char数组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57119666/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com