Rustで単純なTCP/IPクライアントを作成しようとしています。サーバーから取得したバッファーを出力する必要があります。u8
ベクトルをString
印刷用?
バイトのスライスを文字列スライスに変換するには(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);
}
_
変換はインプレースであり、割り当てを必要としません。必要に応じて、文字列スライスで.to_owned()
を呼び出すことにより、文字列スライスからString
を作成できます( 他のオプションが利用可能 )。
変換関数のライブラリリファレンス:
_fn main() {
let buf = &[0x41u8, 0x41u8, 0x42u8];
let s = String::from_utf8_lossy(buf);
println!("result: {}", s);
}
_
無効なUTF-8バイトを�に変換するため、エラー処理は不要です。あなたがそれを必要とせず、私はほとんどそれを必要としないときのためにそれは良いです。これから実際にString
を取得します。サーバーから取得したものを少し簡単に印刷できるはずです。
書き込み時に複製されるため、 into_owned()
メソッドを使用する必要がある場合があります。
実際にバイトのベクトルがある場合(Vec<u8>
)およびString
に変換したい場合、最も効率的なのは String::from_utf8
:
fn main() {
let bytes = vec![0x41, 0x42, 0x43];
let s = String::from_utf8(bytes).expect("Found invalid UTF-8");
println!("{}", s);
}