四时宝库

程序员的知识宝库

rust 中的一些常用的类型转换(rust基本玩法)

最近项目需要使用到 rust 去编写 WebAssembly ,并把 wasm 加载到 nodejs 中,这给不爱写 c++ 的我提供了另外一种方式去编写 wasm 文件。

从现在来看,rust 的一些文档好像还是不是很全面,示例也不是很多,并且由于是要用 WebAssembly 所以,很多 crate 也用不了,并且在各种类型转换中也遇到不少的问题,现在整理几个我在项目中常用的类型转换,主要是字符串操作和 js_sys 的一些类型转换,以备后续查询

  • 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();
  • 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();
  • 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();
  • &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();
  • js_sys::JsValue 的一些转换
//从 JsValue 创建一个 Uint8Array
let result: JsValue = JsValue::from_str("this is string");
let arr:Uint8Array = js_sys::Uint8Array::new(&result);

//Uint8Array 转成 Vec<u8>
let u8_arr = js_sys::Uint8Array::new(&result).to_vec();

//&[u8] 生成 Uint8Array
let binary_array: Uint8Array = Uint8Array::from(content);

//Uint8Array 生成 JsValue
let js_val = JsValue::from(binary_array);

//从 &str 生成 JsValue
let js_value:JsValue = JsValue::from_str("this is a text");

//JsValue 生成 String
let js_str = js_value.as_string().unwrap();


如果你对这个行业充满兴趣,那么请关注我,我将为大家分享程序界的各种知识、八卦趣闻等,没有门槛,只要你有兴趣。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接