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は難しい。
メモしないと分からない。