반응형
바이트 벡터 (u8)를 문자열로 어떻게 변환합니까?
Rust로 간단한 TCP / IP 클라이언트를 작성하려고하는데 서버에서받은 버퍼를 출력해야합니다. u8
벡터를 String
인쇄용으로 어떻게 변환 합니까?
바이트 조각을 문자열 조각으로 변환하려면 (UTF-8 인코딩 가정) :
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);
}
변환은 제자리에 있으며 할당이 필요하지 않습니다. String
필요한 경우 문자열 슬라이스를 호출하여 문자열 슬라이스에서 를 만들 수 있습니다 .to_owned()
( 다른 옵션을 사용할 수 있음 ).
변환 함수에 대한 라이브러리 참조 :
나는 선호한다 String::from_utf8_lossy
:
fn main() {
let buf = &[0x41u8, 0x41u8, 0x42u8];
let s = String::from_utf8_lossy(buf);
println!("result: {}", s);
}
유효하지 않은 UTF-8 바이트를 로 변환하므로 오류 처리가 필요하지 않습니다. 그게 필요없고 거의 필요하지 않을 때 좋습니다. 당신은 실제로 String
이것을 얻습니다 . 서버에서 얻는 것을 조금 더 쉽게 인쇄 할 수 있습니다.
into_owned()
쓰기시 클론이기 때문에 때때로 메서드 를 사용해야 할 수도 있습니다 .
실제로 바이트 ( Vec<u8>
) 벡터가 있고로 변환하려는 String
경우 가장 효율적인 방법은 String::from_utf8
다음 과 함께 할당을 재사용하는 것입니다 .
fn main() {
let bytes = vec![0x41, 0x42, 0x43];
let s = String::from_utf8(bytes).expect("Found invalid UTF-8");
println!("{}", s);
}
참고 URL : https://stackoverflow.com/questions/19076719/how-do-i-convert-a-vector-of-bytes-u8-to-a-string
반응형
'code' 카테고리의 다른 글
임의의 문자열이 유효한 파일 이름인지 확인하는 가장 쉬운 방법 (0) | 2020.11.07 |
---|---|
리베이스 후 변경 사항이 손실 되었습니까? (0) | 2020.11.07 |
스크립트를 사용하여 특정 작업 디렉토리가있는 Git Bash 창을 어떻게 시작합니까? (0) | 2020.11.07 |
새로 추가하는 방법 (0) | 2020.11.07 |
UIWebView의 scalesPageToFit에 해당하는 WKWebView (0) | 2020.11.07 |