我想在Rust中編寫簡單的TCP/IP客戶端,並且需要打印出從服務器獲得的緩衝區。如何將u8
矢量轉換爲String
進行打印?如何將字節向量(u8)轉換爲字符串
回答
的字節切片轉換爲字符串切片(假設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
。
用於轉換函數庫參考:
fn main() {
let buf = &[0x41u8, 0x41u8, 0x42u8];
let s = String::from_utf8_lossy(buf);
println!("result: {}", s);
}
原來無效UTF-8字節到等沒有任何錯誤處理是必須的。當你不需要時,這很好,我幾乎不需要它。你實際上從這裏得到String
。它應該使打印出來的服務器更容易一些。
有時您可能需要使用into_owned()
方法,因爲它在寫入時是克隆的。
非常感謝'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);
}
謝謝!爲什麼其他兩個答案會忽略這個問題? – Jehan
@Jehan因爲人們通常不擅長提問,特別是當他們對某種語言不熟悉時。 Rust在* array *,a * slice *和a *'Vec' *之間做了區分,但新手不知道區別。確保儘快提供所有證明有用的問題和答案。 – Shepmaster
- 1. 如何將字符串轉換爲u8?
- 2. (C++)如何將字符串轉換爲字符向量?
- 3. 字節[]將字符串轉換爲字節[] - 如何操作?
- 4. 如何將字節字符串轉換爲字節[]
- 5. 如何將Python 3字節字符串變量轉換爲常規字符串?
- 6. 如何將PDF字節[]轉換爲字符串並將字符串轉換爲PDF字節[]
- 7. Java - 將字節[]轉換爲字符串
- 8. 將字節轉換爲字符串
- 9. 將字節轉換爲字符串
- 10. 將字符串轉換爲字節[]
- 11. 將字符串轉換爲字節
- 12. 將字節[]轉換爲UTF8字符串
- 13. Android - 將字符串轉換爲字節[]
- 14. 將字符串轉換爲字節
- 15. 將字符串轉換爲字節
- 16. 將字符串轉換爲utf8字節
- 17. 如何將字符和字符串轉換爲字節數組?
- 18. 將字符串[]轉換爲字節[] 2個字符轉換爲字節?
- 19. 字符串轉換爲字節轉換
- 20. 字符串轉換爲字節[]和轉換字節[]串
- 21. 如何將矢量字符串轉換爲簡單字符串
- 22. 如何在Oracle中將字節字符串轉換爲數字?
- 23. 將字節值存儲在字符串中?將字節轉換爲字符串?
- 24. 將字符串向量轉換爲C++中的字符數組
- 25. 將unicode字符串轉換爲字節字符串
- 26. C#將字節數組與字符串轉換爲字符串
- 27. 將字節字符串轉換爲python中的字符串
- 28. 如何從系統::字符串轉換爲常量字節*
- 29. 如何將字符串表示字節轉換回字節?
- 30. 如何將字符串轉換爲C++中的向量?
你可能想補充一點,這是可能是因爲Vec強制切片 – torkleyy
,儘管示例代碼實際上並未使用Vector :-) –