您当前的位置 :首页 > 学习资料 > rust中String,&str,Vec <u8>和&[u8]的惯用转换
投稿

rust中String,&str,Vec <u8>和&[u8]的惯用转换

2023-02-27 16:36:24 来源: 作者: 责任编辑:cncml

from to 函数
&str String String::from(s) 或 s.to_string() 或 s.to_owned()
&str &[u8] s.as_bytes()
&str Vec<u8> s.as_bytes().to_vec()
String &[u8] s.as_bytes()
String &str s.as_str() 或 &s
String Vec<u8> s.into_bytes()
&[u8] &str std::str::from_utf8(s).unwrap()
&[u8] String String::from_utf8(s).unwrap()
&[u8] Vec<u8> s.to_vec()
Vec<u8> &str std::str::from_utf8(&s).unwrap()
Vec<u8> String String::from_utf8(&s).unwrap()
Vec<u8> &[u8] &s 或 s.as_slice()

修正下面表格

&str -> String--| String::from(s) or s.to_string() or s.to_owned()
&str -> &[u8]---| s.as_bytes()
&str -> Vec<u8>-| s.as_bytes().to_vec() or s.as_bytes().to_owned()
String -> &str----| &s if possible* else s.as_str()
String -> &[u8]---| s.as_bytes()
String -> Vec<u8>-| s.into_bytes()
&[u8] -> &str----| std::str::from_utf8(s).unwrap()
&[u8] -> String--| String::from_utf8(s).unwrap()
&[u8] -> Vec<u8>-| s.to_vec()
Vec<u8> -> &str----| std::str::from_utf8(&s).unwrap()
Vec<u8> -> String--| String::from_utf8(s).unwrap()
Vec<u8> -> &[u8]---| &s if possible* else s.as_slice()

上面转换内容已在网友提示下修正,之前版本答案有误导
 

  • String 和 &str 之间的转换:
// String 转 &str
let s = String::from("hello");
let s_slice: &str = &s;

// &str 转 String
let s = "hello";
let s_string: String = s.to_string();
  • Vec<u8> 和 &[u8] 之间的转换
// Vec<u8> 转 &[u8]
let v: Vec<u8> = vec![72, 101, 108, 108, 111]; // "Hello"
let v_slice: &[u8] = &v;

// &[u8] 转 Vec<u8>
let v_slice: &[u8] = &[72, 101, 108, 108, 111]; // "Hello"
let v_vec: Vec<u8> = v_slice.to_vec();
  • String 和 Vec<u8> 之间的转换:
// String 转 Vec<u8>
let s = String::from("hello");
let v: Vec<u8> = s.into_bytes();

// Vec<u8> 转 String
let v: Vec<u8> = vec![104, 101, 108, 108, 111]; // "hello"
let s: String = String::from_utf8_lossy(&v).to_string();
  • &str 和 &[u8] 之间的转换:
// &str 转 &[u8]
let s: &str = "hello";
let s_bytes: &[u8] = s.as_bytes();

// &[u8] 转 &str
let s_bytes: &[u8] = &[104, 101, 108, 108, 111]; // "hello"
let s_str: &str = std::str::from_utf8(s_bytes).unwrap(); 


注意:在这些转换中,可能会出现编码问题。特别是,在将字节序列转换为字符串时,必须考虑编码方式(例如UTF-8),否则会导致错误。在某些情况下,使用特定的编码方式(例如ISO 8859-1)可能更合适。



 
文章来源: 责任编辑:cncml
版权声明:
1、本主题所有言论和图片纯属会员个人意见,与本网站立场无关
2、本站所有主题由该文章作者发表,该文章作者与享有文章相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该文章作者和的同意
4、文章作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、管理员和版主有权不事先通知发贴者而删除本文
不良信息举报信箱 新闻热线:18733599993 技术服务:18733599993 网上投稿
关于本站 | 广告服务 | 免责申明 | 招聘信息 | 联系我们
在线网 版权所有 Copyright(C)2005-2025