Próbuję napisać prostego klienta TCP/IP w Rust i muszę wydrukować bufor, który dostałem z serwera. Jak przekonwertować wektor u8
na String
do drukowania?Jak przekonwertować wektor bajtów (u8) na ciąg
Odpowiedz
celu przekształcenia kawałek bajtów segmentu łańcucha (zakładając kodowania 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);
}
Konwersja jest na miejscu, a nie wymaga przyporządkowania. W razie potrzeby możesz utworzyć String
z plasterka.
Odniesienie Biblioteka dla funkcji konwersji:
wolę String::from_utf8_lossy
:
fn main() {
let buf = &[0x41u8, 0x41u8, 0x42u8];
let s = String::from_utf8_lossy(buf);
println!("result: {}", s);
}
Okazuje nieprawidłowe UTF-8 bajtów do i tak nie ma obsługi błędów jest wymagane. Jest to dobre, gdy tego nie potrzebujesz i prawie nie potrzebuję. Otrzymujesz od tego String
. Powinno to nieco ułatwić drukowanie tego, co dostajesz z serwera.
Czasami może zajść potrzeba użycia metody into_owned()
, ponieważ jest to klon podczas pisania.
Wielkie dzięki za sugestię 'do_owned()'! Było dokładnie to, czego szukałem (dzięki temu staje się właściwym 'Stringiem ', który możesz zwrócić jako wartość zwracaną z metody, na przykład). –
Jeśli rzeczywiście mają wektor bajtów (Vec<u8>
) i chcesz przekonwertować do String
, najbardziej efektywne jest wykorzystanie alokacji z String::from_utf8
:
fn main() {
let bytes = vec![0x41, 0x42, 0x43];
let s = String::from_utf8(bytes).expect("Found invalid UTF-8");
println!("{}", s);
}
Dzięki! Dlaczego dwie pozostałe odpowiedzi ignorują pytanie? – Jehan
@Jehan, ponieważ ludzie zazwyczaj nie są dobrzy w zadawaniu pytań, zwłaszcza gdy są nowicjuszami w danym języku. Rust wprowadza rozróżnienie między * array *, a * slice * i * 'Vec' *, ale nowi użytkownicy nie znają różnic. Upewnij się jednak, że wszystkie pytania i odpowiedzi są przydatne. – Shepmaster
- 1. Jak przekonwertować ciąg znaków szesnastkowy na ciąg bajtów w Perlu?
- 2. Python OpenCV przekonwertować obraz na ciąg bajtów?
- 3. przekonwertować ciąg bajtów na int (python)
- 4. Matlab, jak przekonwertować ciąg liczb całkowitych na wektor?
- 5. Jak przekonwertować ciąg znaków UTF8 na tablicę bajtów?
- 6. Jak przekonwertować tablicę bajtów UInt8 na ciąg w Swift
- 7. Jak przekonwertować tablicę bajtów na ciąg w Javie?
- 8. Jak przekonwertować łańcuch szesnastkowy na tablicę bajtów?
- 9. Jak przekonwertować tablicę bajtów na obiekt blobowy
- 10. Konwertowanie bajtów na ciąg C#
- 11. przekonwertować ciąg bajtów do cv :: maty
- 12. Jak przekonwertować wektor wiersza na wektor kolumny w Eigen?
- 13. Jak skutecznie przekonwertować tablicę bajtową na ciąg
- 14. Jak mogę przekonwertować wektor na rekord?
- 15. Jak przekonwertować przejezdną Haskell na wektor?
- 16. Jak przekonwertować ciąg na bajt w Javie
- 17. Konwertuj wektor z uint8 na ciąg
- 18. Jak przekonwertować zwrot WebResponse.GetResponseStream na ciąg znaków?
- 19. C++ wektor ciąg
- 20. Jak przekonwertować tablicę bajtów na załącznik mailowy
- 21. Jak przekonwertować macierz bajtów na ByteArrayOutputStream
- 22. Jak przekonwertować tablicę bajtów na Bitmapę
- 23. Android: jak przekonwertować tablicę bajtów na Bitmapę?
- 24. Jak przekonwertować outputStream na tablicę bajtów?
- 25. Jak przekonwertować tablicę bajtów na MultipartFile
- 26. jak przekonwertować ciąg c na ciąg d?
- 27. Jak przekonwertować uint32 na ciąg?
- 28. Jak przekonwertować znak na ciąg?
- 29. Jak przekonwertować JSON na ciąg?
- 30. Jak przekonwertować ciąg na CharSequence?
Można dodać, że jest to możliwe, ponieważ Vec wymusza na plasterki – torkleyy
, chociaż przykładowy kod nie używa w rzeczywistości wektora :-) –