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