LoginSignup
193
106

More than 3 years have passed since last update.

rust String &str の変換と、文字列 数値 の変換

Last updated at Posted at 2018-02-20

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_digitcharに変換します。
変換する数値は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は難しい。
メモしないと分からない。

193
106
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
193
106