96

この記事は最終更新日から3年以上が経過しています。

投稿日

更新日

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

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
96