如何从Swift不安全指针获取原始整数位模式?
可以从整数构造如何从Swift不安全指针获取原始整数位模式?,swift,Swift,可以从整数构造UnsafePointer,如: let ptr = UnsafePointer<Void>(bitPattern: 123) 通常,您会向堆分配的数据传递指针,但假设您只需要一个64位整数的堆栈,并且您知道系统上的指针是64位的。您可以将整数直接存储在堆栈中,并避免堆分配 Stack *myStack = create_stack(); long elt = 123; stack_push(myStack, (void*)elt); ... elt = (long)
UnsafePointer
,如:
let ptr = UnsafePointer<Void>(bitPattern: 123)
通常,您会向堆分配的数据传递指针,但假设您只需要一个64位整数的堆栈,并且您知道系统上的指针是64位的。您可以将整数直接存储在堆栈中,并避免堆分配
Stack *myStack = create_stack();
long elt = 123;
stack_push(myStack, (void*)elt);
...
elt = (long)stack_pop(myStack);
我正在处理这样的API,但更复杂(用于多边形细分)。我在另一个论坛上找到了答案。使用
unsafeBitCast
:
let ptr = UnsafePointer<Void>(bitPattern: 123)
let x: Int64 = unsafeBitCast(ptr, Int64.self)
// x == 123
let ptr=UnsafePointer(位模式:123)
设x:Int64=unsafeBitCast(ptr,Int64.self)
//x==123
尽管非安全广播
有效,但natural Swift 4解决方案是
let ptr = UnsafePointer<Void>(bitPattern: 123)
let x = Int(bitPattern: ptr)
let ptr=UnsafePointer(位模式:123)
设x=Int(位模式:ptr)
(请注意,Int
与32位和64位平台上的指针大小相同。)
Int
和UInt
都有位模式:
几种指针类型的初始值设定项:
UnsafePointer?
UnsafeRawPointer?
unsafemeutablepointer?
UnsafemeutableRawPointer?
OpaquePointer?
ObjectIdentifier
let ptr = UnsafePointer<Void>(bitPattern: 123)
let x = Int(bitPattern: ptr)