Cast C struct指向Swift结构不安全指针的双指针
我需要在Swift(4)中进行以下C转换:
struct A ** castme = input struct B * tothis = (struct B *)castme
在Swift中, castme
类型是UnsafeMutablePointer<UnsafeMutablePointer?>!
我假设我正在尝试转换为UnsafeMutablePointer!
?
另外,说我也可以直接将*(castme)
转换为(struct B)
是否正确? 如果是,是否可以通过从UnsafeMutablePointer?
进行投射来UnsafeMutablePointer?
到B
?
我看到了这个线程但是无法从中获得我需要的东西: 在Swift中转换为不同的C struct unsafe指针
让我们根据C中发生的事情来考虑这一点。当我在C中执行指针转换时,表示指针类型的数据现在将被视为不同类型的指针。 指针的值不会改变,只是你如何对待它。
Swift不喜欢做这种事情并且不鼓励你这样做,因为虽然价格便宜,但这是一个根本不安全的事情,可能会导致数据损坏,跳入太空,总线错误等。
这并不意味着swift没有能力做到这一点。 您指向的链接使用withUnsafePointerTo
,它试图限制指针使用的范围。 在你的情况下,你可能想看看模仿C指针unsafeBitCast
( 这里的文档)(它通常与C强制转换并不完全相同,但对于指针来说却是如此)。
let a:UnsafeMutablePointer = fetchASomeTypePointer() let b = unsafeBitCast(a, to: UnsafeMutablePointer.self)
这使得表示SomeType
指针的数据现在成为SomeOtherType
的指针。
就像我之前说的那样,这是一件危险的事情,特别是如果你不完全明白你在做什么的话。