数据类型的转换

类型转换的方式

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

  • as T

    用于数类型之间的转换。ixx, uxx, fxx 都可以。

    注意:当溢出的时候,转换不会 panic,而是循环映射值。

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>
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

    只能从小范围数类型变成大的数类型。安全。

    也可以用于 str 和 String 之间的转换。
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
// 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

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

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
}

在日期和字符串之间转换

// 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"
}

[Rust] 数据类型的转换的更多相关文章

  1. java中数据类型的转换

    数据类型的转换,分为自动转换和强制转换. 自动转换是程序执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换 强制转换必须在代码中声明,转换顺序不受限制 自动数据类 ...

  2. Java的基本数据类型与转换

    1.1 Java为什么需要保留基本数据类型 http://www.importnew.com/11915.html 基本数据类型对大多数业务相关或网络应用程序没有太大的用处,这些应用一般是采用客户端/ ...

  3. java的数据类型的转换

    一:java的数据类型转换除布尔类型boolean(不能转换)有两种:<一> 自动转换: <二> 强制转换 <一>.自动转换:就是将小的数据类型自动转换成大的数据类 ...

  4. JavaScript学习笔记——数据类型强制转换和隐式转换

    javascript数据类型强制转换 一.转换为数值类型 Number(参数) 把任何的类型转换为数值类型 A.如果是布尔值,false为0,true为1 B.如果是数字,转换成为本身.将无意义的后导 ...

  5. JAVA数据类型自动转换,与强制转换

    一.数据类型自动转换 public class Test{ public static void main(String[] args){ int a = 1; double b = 1.5; dou ...

  6. Java学习笔记之:Java数据类型的转换

    一.介绍 数据类型的转换,分为自动转换和强制转换.自动转换是程序在执行过程中“悄然”进行的转换,不需要用户提前声明,一般是从位数低的类型向位数高的类型转换:强制类型转换则必须在代码中声明,转换顺序不受 ...

  7. 语言基础:C#输入输出与数据类型及其转换

    今天学习了C#的定义及特点,Visual Studio.Net的集成开发环境和C#语言基础. C#语言基础资料——输入输出与数据类型及其转换 函数的四要素:名称,输入,输出,加工 输出 Console ...

  8. C#基础(八)——C#数据类型的转换

    C#数据类型的转换主要有以下几种方式: 1.强制转换 注意:char类型不能强制转换成int,如果使用强制转化,得到的是原整数的ASCII码值. 2.class.parse(string类型的变量), ...

  9. php之数据类型自动转换

    1:概述 ---php是一种弱类型的语言,它可以根据运行环境的变化而自动进行数据类型的转换 1.1转换成布尔类型的原则 以下值都将转换成布尔类型中的false: A.布尔类型的false; B.空字符 ...

  10. Spark PySpark数据类型的转换原理—Writable Converter

    Spark目前支持三种开发语言:Scala.Java.Python,目前我们大量使用Python来开发Spark App(Spark 1.2开始支持使用Python开发Spark Streaming ...

随机推荐

  1. [转帖]好用的parallel命令

    https://www.cnblogs.com/codelogs/p/16060043.html 原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 有时,我们需要 ...

  2. Python设计模式:你的代码真的够优雅吗?

    当涉及到代码优化时,Python作为一种高级编程语言,具有广泛的应用领域和强大的功能.在软件开发中,设计模式是一种被广泛采用的解决问题的方案,它提供了一种在特定情境中重复使用的可行方案.在Python ...

  3. vue报错:'XX' is defined but never used no-unused-vars

    参考地址:http://www.gold404.cn/info/87 导致这个报错的原因就是eslint校验, 就是你当初在vue创建脚手架的时候选择了eslint校验: 后面你绝对会碰到这样的报错, ...

  4. 【一个经典BUG】gin框架中,异步协程使用context导致取不到数据

    bug的内容大致如下: func httpHandle(c *gin.Context) { go func(ctx Context){ v := ctx.Value("xxx") ...

  5. ABP-VNext 用户权限管理系统实战05----扩展授权类型(单点登录)

    一.适合场景: 1.我方系统在集成到别人的集成本台时一般是拿别的平台的用户名,在我方系统进行登录 2.我方系统是前后端分离,前端要拿到token 二.解决方案:自定义授权类型 我们知道Identity ...

  6. 手撕Vue-提取元素到内存

    接着上一篇文章,我们已经实现了构建Vue实例的过程,接下来我们要实现的是提取元素到内存. 主要是通过文档碎片来实现,文档碎片是一个轻量级的文档,可以包含和控制节点,但是不会像真实的DOM那样占用内存, ...

  7. 2.13 PE结构:实现PE代码段加密

    代码加密功能的实现原理,首先通过创建一个新的.hack区段,并对该区段进行初始化,接着我们向此区段内写入一段具有动态解密功能的ShellCode汇编指令集,并将程序入口地址修正为ShellCode地址 ...

  8. 飞桨paddlespeech语音唤醒推理C INT8 定点实现

    前面的文章(飞桨paddlespeech语音唤醒推理C定点实现)讲了INT16的定点实现.因为目前商用的语音唤醒方案推理几乎都是INT8的定点实现,于是我又做了INT8的定点实现. 实现前做了一番调研 ...

  9. ubuntu系统单网卡配置多网段IP

    环境 系统版本:Ubuntu 16.04.5 LTS 配置 ubuntu系统网卡文件是interfaces,修改网卡配置文件vim /etc/network/interfaces添加2个IP地址: a ...

  10. Windows 7 Ultimate with Service Pack 1 (x64)

    Windows 7 Ultimate with Service Pack 1 (x64) 链接:https://pan.baidu.com/s/1ZHODDFlJPLQ3ydxZ4rfc3g 提取码: ...