gpt4 book ai didi

swift - 将 UnsafeMutableRawPointer 转换为 UInt64

转载 作者:行者123 更新时间:2023-11-28 05:44:34 32 4
gpt4 key购买 nike

我有一个 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 转换为整数以任何其他方式(但不要太荒谬,如字符串解析)?

最佳答案

(U)Int在所有平台(32 位或 64 位)上都具有指针的大小,因此您始终可以在 Unsafe(Mutable)(Raw)Pointer 之间进行转换和 IntUInt :

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 位平台上,UIntUInt64 也是不同的类型。)

如果你需要 UInt64然后

let intRepresentation = UInt64(bitPattern:Int64(Int(bitPattern: pointer)))

成功了。

关于swift - 将 UnsafeMutableRawPointer 转换为 UInt64,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55313453/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com