最佳答案
编者按: 这个问题来自于 Rust 1.0之前的一个版本,它引用了 Rust 1.0中没有的一些条目。答案仍然包含有价值的信息。
从(比如说) usize
转换成 u32
的惯用方法是什么?
例如,使用 4294967295us as u32
铸造工程和 Rust 0.12类型铸造参考文档说
数值可以强制转换为任何数值类型。原始指针值可以强制转换为任何整数类型或原始指针类型,也可以从任何整数类型或原始指针类型强制转换。任何其他强制转换都不受支持,并且将无法编译。
但是 4294967296us as u32
将无声地溢出并给出0的结果。
我发现 ToPrimitive
和 FromPrimitive
提供了很好的功能,比如 to_u32() -> Option<u32>
,但是它们被标记为不稳定:
#[unstable(feature = "core", reason = "trait is likely to be removed")]
在数字(和指针)类型之间进行转换的惯用(和安全)方法是什么?
isize
/usize
依赖于平台的大小是我问这个问题的原因之一——最初的场景是我想从 u32
转换到 usize
,这样我就可以在 Vec<u32>
中表示一棵树(例如 let t = Vec![0u32, 0u32, 1u32]
,然后得到节点2的祖父节点就是 t[t[2us] as usize]
) ,我想知道如果 usize
小于32位,它将如何失败。