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