【发布时间】:2022-07-07 20:36:20
【问题描述】:
如果我在 Rust 中获得一个指针的地址并将其转换为数字类型,例如这样:
let map: HashMap<i32, String> = HashMap::new();
let ptr = std::ptr::addr_of!(map);
let ptri = ptr as i32;
我可以从ptri 变量中取回原始实例(在这种情况下为HashMap)吗?
类似于 C 语言:
HashMap *map = (HashMap*)(uintptr_t)ptri;
【问题讨论】:
-
Rust 相当于
uintptr_t是usize,所以你可能想要let ptri = ptr as usize, -
请注意,这是否有效尚未确定——目前无法找到相关讨论,但关键词是“指针出处”。
-
@Cerberus 它是被允许的,并且总是会被允许(暴露出处和天使的不确定性,虽然
as演员可能在(遥远的)未来被弃用,但它' 将始终与expose_addr()/from_exposed_addr()一起使用)。唯一的讨论是关于添加更好的方法(您正在寻找“严格出处”的努力)。 -
吹毛求疵:
addr_of!()?只需使用&map as *const _。