gpt4 book ai didi

c - 如何访问映射到 swift 结构的内存缓冲区?

转载 作者:行者123 更新时间:2023-11-30 19:27:08 25 4
gpt4 key购买 nike

这对你来说可能是微不足道的,但我是 Swift 新手,我找不到答案。我使用 C 代码从 TCP/IP 转换数据,一切正常。但是当我尝试将数据发送回 Swift 时,我收到错误:“UnsafeMutablePointer”类型的值没有成员“x”(在编译时)。

简单地说,我的 C 代码生成一个结构,我希望我的 swift 代码能够读取该结构并使用该结构来访问字段。注意:我不想复制数据(这里的示例很简单,但我处理的是 MB (GB)。

override func viewDidLoad()
{
struct MyStruct1
{
var x : UInt32
var y : UInt32
}
var buffer : UnsafeMutablePointer<UInt8>?
//...
buffer = UnsafeMutablePointer<UInt8>.allocate( capacity: Int(1024) )
if (buffer != nil)
{
defer { buffer!.deallocate() }
// CCode_That_Initializes_Buffer( buffer ) with An array of MyStruct
var myStructP : UnsafeMutablePointer<MyStruct1>
myStructP = UnsafeMutableRawPointer(buffer!).assumingMemoryBound(to: MyStruct1.self)
// Value of type 'UnsafeMutablePointer<MyStruct1>' has no member 'x'
print( myStructP.x ) // <= This does not compile
}
}

最佳答案

您无法将分配为不安全原始指针的缓冲区映射到 Swift 结构变量而不进行复制。

Swift 结构变量具有其他语言属性,因此您只能通过指针访问 Swift 结构变量的内容,前提是该变量已被 Swift 分配为相同的结构类型(例如,不是作为传递给它的不安全指针)由C)。

相反,您可以编写访问器函数,使用每个 Swift 结构元素的偏移量和大小来从绑定(bind)到所需类型的变量的偏移量原始指针读取和写入字节。

或者只是通过桥接头使用 C 结构。

关于c - 如何访问映射到 swift 结构的内存缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56032236/

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