03-其它转换
其它转换 — Rust By Practice
3 分钟阅读
内容来源 · Rust By Practice / Rust 语言实战
原文链接: https://practice-rust-zh.beatai.org/type-conversions/others.html
其它转换
将任何类型转换成 String
只要为一个类型实现了 ToString,就可以将任何类型转换成 String。事实上,这种方式并不是最好的,大家还记得 fmt::Display 特征吗?它可以控制一个类型如何打印,在实现它的时候还会自动实现 ToString。
- 🌟🌟
| |
解析 String
- 🌟🌟🌟 使用
parse方法可以将一个String转换成i32数字,这是因为在标准库中为i32类型实现了FromStr: :impl FromStr for i32
| |
- 🌟🌟 还可以为自定义类型实现
FromStr特征
| |
Deref 特征
Deref 特征在智能指针 - Deref章节中有更加详细的介绍。
transmute
std::mem::transmute 是一个 unsafe 函数,可以把一个类型按位解释为另一个类型,其中这两个类型必须有同样的位数( bits )。
transmute 相当于将一个类型按位移动到另一个类型,它会将源值的所有位拷贝到目标值中,然后遗忘源值。该函数跟 C 语言中的 memcpy 函数类似。
正因为此,transmute 非常非常不安全! 调用者必须要自己保证代码的安全性,当然这也是 unsafe 的目的。
示例
transmute可以将一个指针转换成一个函数指针,该转换并不具备可移植性,原因是在不同机器上,函数指针和数据指针可能有不同的位数( size )。
| |
transmute还可以扩展或缩短一个不变量的生命周期,将 Unsafe Rust 的不安全性体现的淋漓尽致!
| |
- 事实上我们还可以使用一些安全的方法来替代
transmute.
| |
你可以在这里找到答案(在 solutions 路径下)