首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将UnsafeMutableRawPointer转换为UInt64

将UnsafeMutableRawPointer转换为UInt64
EN

Stack Overflow用户
提问于 2019-03-23 11:53:47
回答 1查看 924关注 0票数 2

我有一个UnsafeMutableRawPointer实例,并希望检索它的更强的表示形式。我试图使用以下代码:

代码语言:javascript
复制
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转换为整数(但不太荒谬,比如字符串解析)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-23 12:02:01

(U)Int在所有平台上都有指针大小(32位或64位),所以您可以始终在Unsafe(Mutable)(Raw)PointerIntUInt之间进行转换。

代码语言:javascript
复制
let pointer: UnsafeRawPointer? = ...
let intRepresentation = UInt(bitPattern: pointer) 
let ptrRepresentation = UnsafeRawPointer(bitPattern: intRepresentation)
assert(ptrRepresentation == pointer)

你的代码

代码语言:javascript
复制
let intRepresentation = UInt64(bitPattern: pointer) 

不编译是因为UInt64没有接受指针参数的初始化程序,这是因为指针可以是32位或64位。(即使在64位平台上,UIntUInt64也是不同的类型。)

如果你需要一个UInt64

代码语言:javascript
复制
let intRepresentation = UInt64(bitPattern:Int64(Int(bitPattern: pointer)))

就能做到这一点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55313453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档