我有一个UnsafeMutableRawPointer实例,并希望检索它的更强的表示形式。我试图使用以下代码:
let pointer : UnsafeMutableRawPointer? = address(of: self)
let intRepresentation : UInt64 = UInt64(bitPattern: pointer)但是Swift编译器抛出错误:“无法将'UnsafeMutableRawPointer?‘类型的值转换为预期的参数类型'Int64'”。
构造函数声明为public init(bitPattern pointer: UnsafeMutableRawPointer?)是Swift.Math.Integers.UInt,它在同一个文件中也有public init(bitPattern x: Int64)。
我如何使这段代码工作或以任何其他方式将UnsafeMutableRawPointer转换为整数(但不太荒谬,比如字符串解析)?
发布于 2019-03-23 12:02:01
(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)))就能做到这一点。
https://stackoverflow.com/questions/55313453
复制相似问题