본문 바로가기

개발 이야기/Rust 언어 이야기

Rust - string conversion 관련 예제 코드

728x90

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 기본 타입 에서 지원

 

 

 

그럼,

  정보 공유합니다.

 

728x90