

rustでcharからstringに変換するメソッドは用意されていますが、charからstrに変換するメソッドはありますか？


CC BY-SA 4.0
2020-05-08T07:41:37.990
66427
2020-05-08T08:27:36.320
2020-05-08T07:49:53.203
32986
40056
question
rust
charからstrに変換するには


エンコードした文字`a`を格納するための配列`b`を用意し、文字`a`の`encode_utf8`メソッドの引数として配列`b`を使うことで、配列`b`を指す`&mut
str`の変数に変換することができます。

[code]

    fn main() {
        let c = 'a'; // 文字'a'
    
        let mut b = [0; 4]; // 文字を格納するための配列b
    
        let s = c.encode_utf8(&mut b); // 配列bにUTF8にエンコードした文字cを格納し、bを指す&mut strのsを返す
    
        println!("{}", s); // 文字'a'が表示される
    }
    
[/code]

[https://play.rust-
lang.org/?version=stable&mode=debug&edition=2018&gist=64fff54aa8de6d71a3b07c6276f051c6](https://play.rust-
lang.org/?version=stable&mode=debug&edition=2018&gist=64fff54aa8de6d71a3b07c6276f051c6)

`encode_utf8`メソッドについて  
<https://doc.rust-lang.org/std/primitive.char.html#method.encode_utf8>


CC BY-SA 4.0
2020-05-08T08:09:23.150
66428
2020-05-08T08:09:23.150
40026
66427
answer


ちょっと調べてみたのですが不可能そうです。

[リファレンス](https://doc.rust-
lang.org/stable/reference/types/textual.html#textual-
types)によるとStringはUTF-8なのに対してcharはUTF-32でエンコードされています。

[UTF-32、UTF-16、UTF-8
の相互変換](https://qiita.com/benikabocha/items/e943deb299d0f816f161)という記事を見てもらうとわかりやすいと思うですが、エンディアンの違いを抜きにしてもUTF-32はUTF-8のコードポイントを単に4バイトにした形にはなっていないので、メモリ上に参照すべき文字列がないということになります。つまりstrは作成できないということです。  
実際、標準ライブラリでもそのようなAPIは見当たりません。

メモリ確保が嫌でしたら、[ArrayString](https://docs.rs/arrayvec/0.5.1/arrayvec/struct.ArrayString.html)に[push](https://docs.rs/arrayvec/0.5.1/arrayvec/struct.ArrayString.html#method.push)するのが目的に合うかもしれません。


CC BY-SA 4.0
2020-05-08T08:27:36.320
66429
2020-05-08T08:27:36.320
28137
66427
answer