如何从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)