[英]Cast C struct double pointer to a Swift struct unsafe pointer
我需要在Swift(4)中進行以下C轉換:
struct A ** castme = input
struct B * tothis = (struct B *)castme
在Swift中, castme
類型為UnsafeMutablePointer<UnsafeMutablePointer<A>?>!
我以為我要轉換為UnsafeMutablePointer<B>!
?
另外,說我也可以直接將*(castme)
轉換為(struct B)
是正確的嗎? 如果是,通過從UnsafeMutablePointer<A>?
進行鑄造是否會使鑄造更容易UnsafeMutablePointer<A>?
到B
嗎?
我看到了該線程,但無法從中獲取所需信息: 在Swift中強制轉換為其他C結構不安全指針
讓我們考慮一下C中發生的情況。當我在C中進行指針轉換時,表示指針類型的數據現在將被視為其他類型的指針。 指針的值不會改變,只是您如何對待它。
Swift不喜歡這樣做,也不鼓勵您這樣做,因為盡管價格便宜,但這樣做從根本上是不安全的,並且可能導致數據損壞,跳入空間,總線錯誤等。
這並不意味着swift無法執行此操作。 您指向的鏈接與withUnsafePointerTo
一起使用,它試圖限制指針的使用范圍。 在您的情況下,您可能需要查看模仿C指針unsafeBitCast
( 此處的文檔)(通常,它與C強制轉換嚴格不相同,但對於指針來說確實如此)。
let a:UnsafeMutablePointer<SomeType> = fetchASomeTypePointer()
let b = unsafeBitCast(a, to: UnsafeMutablePointer<SomeOtherType>.self)
這使得表示指向SomeType
的指針的數據現在變為指向SomeOtherType
的指針。
如我之前所說,這是一件危險的事情,尤其是如果您不完全了解自己在做什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.