バイトのベクトル (u8) を文字列に変換するにはどうすればいいですか? 質問する

バイトのベクトル (u8) を文字列に変換するにはどうすればいいですか? 質問する

Rust でシンプルな TCP/IP クライアントを作成しようとしており、サーバーから取得したバッファーを印刷する必要があります。

Vec<u8>(または&[u8])を に変換するにはどうすればよいですかString

ベストアンサー1

バイトスライスを文字列スライスに変換するには(UTF-8 エンコードを想定):

use std::str;

//
// pub fn from_utf8(v: &[u8]) -> Result<&str, Utf8Error>
//
// Assuming buf: &[u8]
//

fn main() {

    let buf = &[0x41u8, 0x41u8, 0x42u8];

    let s = match str::from_utf8(buf) {
        Ok(v) => v,
        Err(e) => panic!("Invalid UTF-8 sequence: {}", e),
    };

    println!("result: {}", s);
}

変換はインプレースで行われ、割り当ては必要ありません。String必要に応じて、文字列スライスで を呼び出すことによって、文字列スライスからを作成できます.to_owned()(他のオプションも使用可能)。

バイト スライスが有効な UTF-8 であることが確実であり、有効性チェックのオーバーヘッドを発生させたくない場合は、この関数の安全でないバージョンである があります。from_utf8_uncheckedこれは同じ動作をしますが、チェックをスキップします。

&str の代わりに String が必要な場合は、String::from_utf8代わりに も検討してください。

変換関数のライブラリ参照:

おすすめ記事