How do I convert a Vector of bytes (u8) to a string?

I am trying to write simple TCP/IP client in Rust and I need to print out the buffer I got from the server.

How do I convert a Vec<u8> (or a &[u8]) to a String?

4 Answers

To convert a slice of bytes to a string slice (assuming a UTF-8 encoding):

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);
}

The conversion is in-place, and does not require an allocation. You can create a String from the string slice if necessary by calling .to_owned() on the string slice (other options are available).

The library reference for the conversion function:

2

I prefer String::from_utf8_lossy:

fn main() { let buf = &[0x41u8, 0x41u8, 0x42u8]; let s = String::from_utf8_lossy(buf); println!("result: {}", s);
}

It turns invalid UTF-8 bytes into � and so no error handling is required. It's good for when you don't need that and I hardly need it. You actually get a String from this. It should make printing out what you're getting from the server a little easier.

Sometimes you may need to use the into_owned() method since it's clone on write.

2

If you actually have a vector of bytes (Vec<u8>) and want to convert to a String, the most efficient is to reuse the allocation with String::from_utf8:

fn main() { let bytes = vec![0x41, 0x42, 0x43]; let s = String::from_utf8(bytes).expect("Found invalid UTF-8"); println!("{}", s);
}
4

In my case I just needed to turn the numbers into a string, not the numbers to letters according to some encoding, so I did

fn main() { let bytes = vec![0x41, 0x42, 0x43]; let s = format!("{:?}", &bytes); println!("{}", s);
}
1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like