首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[Rust] 数据类型的转换

[Rust] 数据类型的转换

作者头像
绿巨人
发布于 2021-05-10 02:36:03
发布于 2021-05-10 02:36:03
2.1K00
代码可运行
举报
文章被收录于专栏:绿巨人专栏绿巨人专栏
运行总次数:0
代码可运行

数据类型的转换

类型转换的方式

Rust 提供了多种类型转换的方式。

  • as T 用于数类型之间的转换。ixx, uxx, fxx 都可以。 注意:当溢出的时候,转换不会 panic,而是循环映射值。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fn as_type() {
    // i32 -> i8
    println!("{}", 127i32 as i8);
    // output: 127
    println!("{}", 128i32 as i8);
    // output: -128

    // f64 -> i32 (floor)
    println!("{}", -10000.678f64 as i32);
    // output: -10000

    // integer divide
    for i in 1..10 {
        print!("{} ", i / 2);
    }
    // output: 0 1 1 2 2 3 3 4 4
    println!();

    // float divide
    for i in 1..10 {
        print!("{} ", i as f64 / 2.0);
    }
    // output: 0.5 1 1.5 2 2.5 3 3.5 4 4.5
    println!();
}
  • TryFrom/TryInto 可以在不同的数类型之间转换,越界时,会返回错误。 TryFrom/TryInto 的结果是 Result<T, Error>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use std::convert::TryFrom;
use std::convert::TryInto;

fn try_from_try_into() {
    println!("{}", i8::try_from(32i32).unwrap());
    // output: 32, panic if the value is not fit to i8.
    let i_8: i8 = 32i32.try_into().unwrap();
    println!("{}", i_8);
    // output: 32, panic if the value is not fit to i8.
}
  • From/Into 只能从小范围数类型变成大的数类型。安全。 也可以用于 strString 之间的转换。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use std::convert::From;
use std::convert::Into;

fn from_into() {
    println!("{}", i32::from(127i8));
    // output: 127
    let i_32: i32 = 127i8.into();
    println!("{}", i_32);
    // output: 127
}
  • unsafe
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Cargo.toml
// [dependencies]
// rand = "0.8.3"
use rand::random;

fn unsafe_f64() {
    println!("{}", unsafe {
        f64::to_int_unchecked::<usize>(random::<f64>() * 100.0)
    });
    // output: 67
}
  • to_string/parse

用于字符串和数类型之间转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fn to_string_parse() {
    // string -> float
    let s = "123.456";
    println!("{} ", s.parse::<f64>().unwrap());
    // output: 123.456

    // float -> string
    let f_64 = 123.456;
    println!("{} ", f_64.to_string());
    // output: 123.456

    // float -> string
    let f_64 = 123.456;
    println!("{} ", f_64.to_string());
    // output: 123.456
}

在日期和字符串之间转换

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Cargo.toml
// [dependencies]
// chrono = "0.4"
use chrono::*;

fn date_time() {
    let locale = Local.ymd(2020, 12, 05).and_hms(12, 0, 9);
    println!("{:?}", locale.format("%Y-%m-%d %H:%M:%S.%s").to_string());
    // "2020-12-05 12:00:09.1607140809"

    println!("{:?}", locale.format("%a %b %e %T %Y").to_string());
    // "Sat Dec  5 12:00:09 2020"

    println!("{:?}", locale.format("%c").to_string());
    // "Sat Dec  5 12:00:09 2020"

    println!("{:?}", locale.to_string());
    // "2020-12-05 12:00:09 +08:00"

    println!("{:?}", locale.to_rfc2822());
    // "Sat, 05 Dec 2020 12:00:09 +0800"

    println!("{:?}", locale.to_rfc3339());
    // "2020-12-05T12:00:09+08:00"

    let date_str = "2020-04-12 22:10:57";
    let naive_datetime = NaiveDateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S").unwrap();
    println!("{:?}", naive_datetime.to_string());
    // "2020-04-12 22:10:57"

    let date_str = "2020-04-12 22:10:57 +02:00";
    let datetime = DateTime::parse_from_str(date_str, "%Y-%m-%d %H:%M:%S %z").unwrap();
    println!("{:?}", datetime.to_string());
    // "2020-04-12 22:10:57 +02:00"

    let date_str = "2020-04-12";
    let naive_date = NaiveDate::parse_from_str(date_str, "%Y-%m-%d").unwrap();
    println!("{:?}", naive_date.to_string());
    // "2020-04-12"

    let time_str = "22:10:57";
    let naive_time = NaiveTime::parse_from_str(time_str, "%H:%M:%S").unwrap();
    println!("{:?}", naive_time.to_string());
    // "22:10:57"
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
rust类型转换
Rust 不提供原生类型之间的隐式类型转换(coercion),但可以使用 as 关键字进行显式类型转换(casting)。例如:
zy010101
2023/06/10
8050
rust基本数据类型——标量类型
在rust里数据类型可以分为标量(scalar)和复合(compound)类型,标量类型代表一个单独的值。Rust 有四种基本的标量类型:整型、浮点型、布尔类型和字符类型。rust是静态强类型语言,它在编译时就需要知道所有变量的类型,并且不同类型的数据之间是不允许进行运算的。
zy010101
2022/12/20
1.2K0
【Rust 基础篇】Rust数据类型详解
Rust是一种现代的、安全的系统编程语言,注重内存安全和并发性。在Rust中,数据类型是程序中最基本的构建块之一。本篇博客将详细解释Rust的各种数据类型,并提供相关代码示例。
繁依Fanyi
2023/10/12
6390
【Rust每周一知】神奇的 parse
Rust 中,有一个神奇的函数 parse。它定义在 std:str 下面。因为字符串中可以存放各种信息(如果加上序列化的话),对字符串的解析就显得特别重要,而且很通用。于是 Rust 就赋予了这个函数强大(几乎无限)的功能。
MikeLoveRust
2019/12/17
1.4K0
第3章 | 基本数据类型 | 3.1 固定宽度的述职类型
Rust 语言就是围绕其类型来设计的。Rust 对高性能代码的支持,源自它能让开发人员选择最适合当前场景的数据表示法,并在简单性和成本之间进行合理的权衡。Rust 的内存和线程安全保障也依赖于其类型系统的健全性,而 Rust 的灵活性则源于其泛型类型和特型(Trait)
草帽lufei
2024/05/08
2880
第3章 | 基本数据类型 | 3.1 固定宽度的述职类型
一文快速理解Rust语言扩展trait
科学无非就是在自然界的多样性中寻求统一性(或者更确切地说,是在我们经验的多样性中寻求统一性)。用 Coleridge 的话说,诗歌、绘画、艺术,同样是在多样性中寻求统一性
草帽lufei
2024/05/08
1760
一文快速理解Rust语言扩展trait
Rust学习笔记 常用trait 类型转换,操作符相关
前两天我们学习了内存相关,标记trait,今天我们来学习一下类型转换和操作符相关的常用trait。
用户1072003
2023/02/23
4270
Rust学习笔记 常用trait 类型转换,操作符相关
Rust 从入门到精通05-数据类型
Rust 是 静态类型(statically typed)语言,也就是说在编译时就必须知道所有变量的类型。
IT可乐
2022/09/22
9700
Rust 从入门到精通05-数据类型
go语言中的数据类型
注意,在 Go 语言中有些类型是预定义的别名类型,如 byte 和 rune,它们 实际上是 uint8 和 int32 的别名。还有一种特殊的类型 nil 表示空值,可以表示指针、切片、映射、通道、函数和接口类型的零值。
GeekLiHua
2025/01/21
1220
Rust基本数据类型
什么是类型?类型是对二进制数据的一种约束行为。类型比起直接使用二进制数据,有许多优势:
端碗吹水
2022/06/01
1K0
Rust基本数据类型
每日一文之rust初探
笔者目前接触到的编程语言有java php python golang c/c++ lua scala erlang。
李子健
2022/05/01
3180
Rust学习笔记:3.2 标量类型
3.2 数据类型 数据类型包括了:标量和复合类型 Rust 是静态编译语言,在编译时必须知道所有变量的类型; 给予使用的值,编译器通常能够推断出它的具体类型; 但如果可能的类型比较多(例如把 String 转为整数的 parse 方法),就必须添加类型的标注,否则编译会报错(例子) fn main() { let guess:u32 = "42".parse().expect("NaN"); println!("guess is {}", guess); //42 } 3.2.1 标量类型
DioxideCN
2022/08/05
5470
【译】设计优雅的 Rust 库 API
原文见:https://deterministic.space/elegant-apis-in-rust.html
MikeLoveRust
2019/11/24
1.8K0
Rust实战系列-基本语法
本文是《Rust in action》学习总结系列的第二部分,更多内容请看已发布文章:
abin
2023/03/21
2.4K0
Rust实战系列-基本语法
一起学Rust-变量及类型
在Rust语言中,所有的变量默认均是不可变变量,不可变变量就是当变量完成值当初始化后不能再次重新赋值的变量。
江湖安得便相忘
2019/08/21
1.1K0
一起学Rust-变量及类型
Rust修仙笔记之筑基期
如果我想让一个申明的变量可变,只需用mut修饰即可,注意我们右侧的变量用双引号,不能用单引号。
Maic
2024/02/29
1310
Rust修仙笔记之筑基期
Rust vs Go:常用语法对比(九)
题图来自 Golang vs Rust - The Race to Better and Ultimate Programming Language
fliter
2023/09/05
2790
Rust vs Go:常用语法对比(九)
Rust - 安装环境、基本类型、流程控制、函数、模块、泛型、所有权
学习Rust语言是公司同事最先开始提议的,准备用接下来的项目试试水,Rust是一个强类型编译型语言,比较偏向底层,所以开启了Rust的探索之旅。
stark张宇
2023/02/24
1.2K0
Rust实战系列-深入理解数据
本文是《Rust in action》学习总结系列的第五部分,更多内容请看已发布文章:
abin
2023/03/21
1.4K0
Rust实战系列-深入理解数据
Rust vs Go:常用语法对比(八)
题目来自 Golang vs. Rust: Which Programming Language To Choose in 2023?[1] 141. Iterate in sequence over
fliter
2023/09/05
3600
Rust vs Go:常用语法对比(八)
相关推荐
rust类型转换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档