rust 언어에서 string conversion 관련 유용한 링크가 잇어 남깁니다.
<Conversion between String, str, Vec<u8>, Vec<char> in Rust>
:=> gist.github.com/jimmychu0807/9a89355e642afad0d2aeda52e6ad2424
관련 예제 코드가 간단해서 복퉅하면 아래와 같습니다.
< 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);
}
(추가)
위 링크에 더해서 String과 &str관련 유용한 링크도 남깁니다.
:=> prev.rust-lang.org/ko-KR/faq.html#what-are-the-differences-between-str-and-string
링크 내용을
복붙하면,
:=> String과 &str 의 차이점은 아래와 같습니다.
"""
String은 힙에 할당된 UTF-8 바이트를 소유하는 버퍼입니다. 변경 가능한 String은 수정할 수 있고 필요에 따라 그 용량(capacity)을 늘릴 수 있습니다. &str은 다른 데 (보통 힙에) 할당되어 있는 String으로부터 참조된 슬라이스나, 문자열 리터럴의 경우 정적 메모리를 가리키는, 용량이 고정된 “창”입니다.
&str은 Rust 언어가 구현하는 원시 타입이지만 String은 표준 라이브러리에 구현되어 있습니다.
"""
위 링크를 정리하면
아래와 같습니다.
String => 힙 / 가변적 / rust 표준 라이브러리 에서 지원
&str => 스택 / 고정적 / slice / rust 기본 타입 에서 지원
그럼,
정보 공유합니다.
'개발 이야기 > Rust 언어 이야기' 카테고리의 다른 글
rust 에서 String 에서 요소 하나하나를 index 인덱싱 & print() format (0) | 2021.05.04 |
---|---|
rust 에서 String 에서 요소 하나 하나를 index 인덱싱 하는 방법 (0) | 2021.05.04 |
rust 에서 print()의 format 관련 내용 (0) | 2021.04.30 |
string을 입력받아 거꾸로 string을 출력하는 예 (0) | 2021.04.30 |
rust 언어를 배우기 쉬운 곳 (0) | 2021.04.28 |