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
代わりに も検討してください。
変換関数のライブラリ参照: