Help us understand the problem. What is going on with this article?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした