Skip to content

Instantly share code, notes, and snippets.

Created November 21, 2019 10:20
Show Gist options
  • Save jimmychu0807/9a89355e642afad0d2aeda52e6ad2424 to your computer and use it in GitHub Desktop.
Save jimmychu0807/9a89355e642afad0d2aeda52e6ad2424 to your computer and use it in GitHub Desktop.
Conversion between String, str, Vec<u8>, Vec<char> in Rust
use std::str;
fn main() {
// -- FROM: vec of chars --
let src1: Vec<char> = vec!['j','{','"','i','m','m','y','"','}'];
// to String
let string1: String = src1.iter().collect::<String>();
// to str
let str1: &str = &src1.iter().collect::<String>();
// to vec of byte
let byte1: Vec<u8> = src1.iter().map(|c| *c as u8).collect::<Vec<_>>();
println!("Vec<char>:{:?} | String:{:?}, str:{:?}, Vec<u8>:{:?}", src1, string1, str1, byte1);
// -- FROM: vec of bytes --
// in rust, this is a slice
// b - byte, r - raw string, br - byte of raw string
let src2: Vec<u8> = br#"e{"ddie"}"#.to_vec();
// to String
// from_utf8 consume the vector of bytes
let string2: String = String::from_utf8(src2.clone()).unwrap();
// to str
let str2: &str = str::from_utf8(&src2).unwrap();
// to vec of chars
let char2: Vec<char> = src2.iter().map(|b| *b as char).collect::<Vec<_>>();
println!("Vec<u8>:{:?} | String:{:?}, str:{:?}, Vec<char>:{:?}", src2, string2, str2, char2);
// -- FROM: String --
let src3: String = String::from(r#"o{"livia"}"#);
let str3: &str = &src3;
let char3: Vec<char> = src3.chars().collect::<Vec<_>>();
let byte3: Vec<u8> = src3.as_bytes().to_vec();
println!("String:{:?} | str:{:?}, Vec<char>:{:?}, Vec<u8>:{:?}", src3, str3, char3, byte3);
// -- FROM: str --
let src4: &str = r#"g{'race'}"#;
let string4 = String::from(src4);
let char4: Vec<char> = src4.chars().collect();
let byte4: Vec<u8> = src4.as_bytes().to_vec();
println!("str:{:?} | String:{:?}, Vec<char>:{:?}, Vec<u8>:{:?}", src4, string4, char4, byte4);
Copy link

Thank you for this

Copy link

hvina commented May 5, 2021

Very useful. Thanks

Copy link

mugendi commented May 14, 2021

Couldn't tank you enough?

Copy link


Copy link

autoprog commented Aug 8, 2021


Copy link

I keep using this as a reference, lol. Thank you!

Copy link

dev8118 commented Nov 26, 2021

Thank you so much.
This helped me a lot

Copy link

Thank you so much, saved a long night's work!

Copy link

spdrman commented Jul 1, 2022


Copy link

MFQWKMR4 commented Jul 2, 2022


Copy link

Great. Thank you.

Copy link

lemoncmd commented Sep 24, 2022

@jimmychu0807 Line 11 & 24: multibyte characters are not supported?

Copy link

Lovely. Thanks.

Copy link

hello, based department?

Copy link

My favourite about Rust would be transforming String using let char3: Vec<char> = src3.chars().collect::<Vec<_>>(); into Vec<char>, it makes so much sense!

Copy link

bguo068 commented May 16, 2023

Just found that an alternative way of converting String to Vec is this String::into_bytes().

pub fn into_bytes(self) -> Vec<u8, Global>

Converts a String into a byte vector.

This consumes the String, so we do not need to copy its contents.

Copy link

awesome, thanks!

Copy link

Red3nzo commented Aug 25, 2023

@jimmychu0807 thank you my friend :)

Copy link

Are you god?

Copy link

Thanks, super useful collection of examples!

Copy link

thank you dear sir !

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment