String types in Rust
Wednesday, 28th February 2024, 1804hrs
jw
Rust
|
Software development
Converting between different String types in Rust
let s: String = ...
let st: &str = ...
let u: &[u8] = ...
let b: [u8; 3] = b"foo"
let v: Vec<u8> = ...
let os: OsString = ...
let ost: OsStr = ...
From &Str
...
From |
To |
Use |
Comment |
&str |
String |
String::from(st) |
|
&str |
&[u8] |
st.as_bytes() |
|
&str |
Vec<u8> |
st.as_bytes().to_owned() |
via &[u8] |
&str |
&OsStr |
OsStr::new(st) |
|
From String
...
From |
To |
Use |
Comment |
String |
&str |
&s |
alt. s.as_str() |
String |
&[u8] |
s.as_bytes() |
|
String |
Vec<u8> |
s.into_bytes() |
|
String |
OsString |
OsString::from(s) |
|
From &[u8]
...
From |
To |
Use |
Comment |
&[u8] |
&str |
str::from_utf8(u).unwrap() |
|
&[u8] |
String |
String::from_utf8(u).unwrap() |
|
&[u8] |
Vec<u8> |
u.to_owned() |
|
&[u8] |
&OsStr |
OsStr::from_bytes(u) |
use std::os::unix::ffi::OsStrExt |
From &[u8; 3]
...
From |
To |
Use |
Comment |
[u8; 3] |
&[u8] |
&b[..] |
byte literal |
[u8; 3] |
&[u8] |
"foo".as_bytes() |
alternative via utf8 literal |
From Vec<u8>
...
From |
To |
Use |
Comment |
Vec<u8> |
&str |
str::from_utf8(&v).unwrap() |
via &[u8] |
Vec<u8> |
String |
String::from_utf8(v) |
|
Vec<u8> |
&[u8] |
&v |
|
Vec<u8> |
OsString |
OsString::from_vec(v) |
use std::os::unix::ffi::OsStringExt; |
From Vec<u8>
...
From |
To |
Use |
Comment |
&OsStr |
&str |
ost.to_str().unwrap() |
|
&OsStr |
String |
ost.to_os_string().into_string() |
via OsString.unwrap() |
&OsStr |
Cow<str> |
ost.to_string_lossy() |
Unicode replacement characters |
&OsStr |
OsString |
ost.to_os_string() |
|
&OsStr |
&[u8] |
ost.as_bytes() |
use std::os::unix::ffi::OsStringExt; |
From Vec<u8>
...
From |
To |
Use |
Comment |
OsString |
String |
os.into_string().unwrap() |
returns original OsString on failure |
OsString |
&str |
os.to_str().unwrap() |
|
OsString |
&OsStr |
os.as_os_str() |
|
OsString |
Vec<u8> |
os.into_vec() |
use std::os::unix::ffi::OsStringExt; |