rustでの型変換
rustはasで型を変換出来るのですが、数値から文字列の変換がasでは出来なかったので、上手くいった方法を紹介します。
イマイチどういう方法が良いのかが分かっていません。
まずrustは文字列型がString &strの2種類存在するので,
String &strの変換を紹介したあと文字列から数値への変換を紹介します。
追記
tatsuya6502さんから不足している部分を補足して頂いたので追記しています。
数値から文字への変換を付け足しました。
String → &str
&を付けるだけで出来ます。
let str1: String = String::from("abc");
let str2: &str = &str1;
println!("{}", str2); // "abc"
&str → String
to_string()を利用すると出来ます。
let str1: &str = "abc";
let str2: String = str1.to_string();
println!("{}", str2); // "abc"
追記
Rust 1.19以前の記事ではto_owned()が推奨されている場合があるが現在ではto_string()でも大丈夫です。
String → num
.parse().unwrap()を利用すると出来ます。
ちゃんと変換後の型を指定しないと動きません。
let stri: String = String::from("5");
let num: i32 = stri.parse().unwrap();
println!("{}", num); // 5
&str → num
String → numと同じです。
let stri = "5";
let num: i32 = stri.parse().unwrap();
println!("{}", num); // 5
num → String
&str → Stringと同じくto_string()を利用すると出来ます。
let num: i32 = 5;
let stri: String = num.to_string();
println!("{}", stri); // "5"
追記
小数点の変換などの場合format!()を利用すると小数点の桁数とかを指定できるので、format!()のが柔軟性が高いです。
let num: f64 = 4.3 + 0.1;
let strf1 = num.to_string(); // "4.3999999999999995"
let strf2 = format!("{:.2}", num); // "4.40"
println!("{} {}", strf1, strf2);
num → &str
一旦Stringに変換してから&を付けます。
もっと良いやり方がある気がする。
num → &strは直接作れないのでこの方法で良いみたい。
let num: i32 = 5;
let stri: &str = &num.to_string();
println!("{}", stri); // "5"
char → num
asで数値に変換した後に48引きます。
ASCIIコードでいう'0'です。
let c: char = '5';
let num: i32 = c as i32 - 48;
println!("{}", num); // 5
num → char
from_digitでcharに変換します。
変換する数値はu32でないと行けないのでキャストします、基数は10進数なので10;
その後Some<T>の中身を取り出したいので.unwrap()しています。
let num: i32 = 5;
let c: char = std::char::from_digit(num as u32, 10).unwrap();
println!("{}", c); // '5'
まとめ
rustは難しい。
やっぱりrustは難しい。
メモしないと分からない。