将 UnsafeMutableRawPointer 转换为 UInt64
Convert UnsafeMutableRawPointer to UInt64
我有一个 UnsafeMutableRawPointer 实例,想检索它的整数表示形式。我正在尝试使用以下代码:
let pointer : UnsafeMutableRawPointer? = address(of: self)
let intRepresentation : UInt64 = UInt64(bitPattern: pointer)
但是 Swift 编译器抛出错误:"Cannot convert value of type 'UnsafeMutableRawPointer?' to expected argument type 'Int64'"
声明为 public init(bitPattern pointer: UnsafeMutableRawPointer?)
的构造函数是 Swift.Math.Integers.UInt
它在同一个文件中也有 public init(bitPattern x: Int64)
我如何才能使这段代码工作或将 UnsafeMutableRawPointer 转换为整数以任何其他方式(但不要太荒谬,如字符串解析)?
(U)Int
在所有平台(32 位或 64 位)上都具有指针的大小,因此您始终可以在 Unsafe(Mutable)(Raw)Pointer
和 Int
或 UInt
之间进行转换:
let pointer: UnsafeRawPointer? = ...
let intRepresentation = UInt(bitPattern: pointer)
let ptrRepresentation = UnsafeRawPointer(bitPattern: intRepresentation)
assert(ptrRepresentation == pointer)
您的代码
let intRepresentation = UInt64(bitPattern: pointer)
不编译,因为 UInt64
不 有一个接受指针参数的初始化程序,这是因为指针可以是 32 位或 64 位。 (即使在 64 位平台上,UInt
和 UInt64
也是不同的类型。)
如果你需要UInt64
那么
let intRepresentation = UInt64(bitPattern:Int64(Int(bitPattern: pointer)))
成功了。
我有一个 UnsafeMutableRawPointer 实例,想检索它的整数表示形式。我正在尝试使用以下代码:
let pointer : UnsafeMutableRawPointer? = address(of: self)
let intRepresentation : UInt64 = UInt64(bitPattern: pointer)
但是 Swift 编译器抛出错误:"Cannot convert value of type 'UnsafeMutableRawPointer?' to expected argument type 'Int64'"
声明为 public init(bitPattern pointer: UnsafeMutableRawPointer?)
的构造函数是 Swift.Math.Integers.UInt
它在同一个文件中也有 public init(bitPattern x: Int64)
我如何才能使这段代码工作或将 UnsafeMutableRawPointer 转换为整数以任何其他方式(但不要太荒谬,如字符串解析)?
(U)Int
在所有平台(32 位或 64 位)上都具有指针的大小,因此您始终可以在 Unsafe(Mutable)(Raw)Pointer
和 Int
或 UInt
之间进行转换:
let pointer: UnsafeRawPointer? = ...
let intRepresentation = UInt(bitPattern: pointer)
let ptrRepresentation = UnsafeRawPointer(bitPattern: intRepresentation)
assert(ptrRepresentation == pointer)
您的代码
let intRepresentation = UInt64(bitPattern: pointer)
不编译,因为 UInt64
不 有一个接受指针参数的初始化程序,这是因为指针可以是 32 位或 64 位。 (即使在 64 位平台上,UInt
和 UInt64
也是不同的类型。)
如果你需要UInt64
那么
let intRepresentation = UInt64(bitPattern:Int64(Int(bitPattern: pointer)))
成功了。