我有一个未知大小的数组,我想获得该数组的一部分并将其转换为静态大小的数组:
fn pop(barry: &[u8]) -> [u8; 3] {
barry[0..3] // mismatched types: expected `[u8, ..3]` but found `&[u8]`
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我正在从文件中读取原始数据,我想将其转换为整数:
fn main() {
let buf: &[u8] = &[0, 0, 0, 1];
let num = slice_to_i8(buf);
println!("1 == {}", num);
}
pub fn slice_to_i8(buf: &[u8]) -> i32 {
unimplemented!("what should I do here?")
}
Run Code Online (Sandbox Code Playgroud)
我会在C中进行类型转换,但是我在Rust中做什么?
如果我有一个 type 变量&[u8],有没有办法将其转换为[u8; SIZE]SIZE 是某个固定常量的类型?
我正在计算给定数据的 SHA256:
let hashvalue = sha2::Sha256::digest(&data);
Run Code Online (Sandbox Code Playgroud)
计算后,我想将此值放入结构的字段中:
let x = Hash { value: hashvalue };
Run Code Online (Sandbox Code Playgroud)
但是,Hash结构需要 value 的类型[u8; 32],而我的hashvalue变量是 type GenericArray<u8, ?>。我怎样才能转换hashvalue成正确的类型?我尝试使用as [u8; 32],arr!但没有用。
我做了这样的事情,它有效:
let s = " \"".as_bytes();
let (space, quote) = (s[0], s[1]);
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情
&[space, quote] = " \"".as_bytes();
Run Code Online (Sandbox Code Playgroud)
但它给了我错误
let s = " \"".as_bytes();
let (space, quote) = (s[0], s[1]);
Run Code Online (Sandbox Code Playgroud)
有没有可能做类似的事情?
我有一个数字向量,并使用该windows(2)方法创建一个迭代器,为我提供相邻对。例如,向量[1, 2, 3]被变换为[1, 2], [2, 3]。我想使用该find方法来查找满足特定条件的切片:
fn step(g: u64) -> Option<(u64, u64)> {
let prime_list: Vec<u64> = vec![2, 3, 5, 7]; //For example
if prime_list.len() < 2 {
return None;
}
let res = prime_list.windows(2).find(|&&[a, b]| b - a == g)?;
//...
None
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
fn step(g: u64) -> Option<(u64, u64)> {
let prime_list: Vec<u64> = vec![2, 3, 5, 7]; //For example
if prime_list.len() < 2 {
return None;
}
let res …Run Code Online (Sandbox Code Playgroud) 我想在编译时检查实现中使用的切片是否From具有特定大小。
(游乐场)
#[derive(Debug)]
struct Pixel {
r: u8,
g: u8,
b: u8,
}
impl From<&[u8]> for Pixel {
fn from(arr: &[u8]) -> Pixel {
Pixel {
r: arr[0],
g: arr[1],
b: arr[2],
}
}
}
fn main() {
println!("Hello, world!");
let arr: [u8; 9] = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let pixels: Vec<Pixel> = arr.chunks_exact(3).map(Pixel::from).collect();
println!("{:.?}", pixels);
}
Run Code Online (Sandbox Code Playgroud)
这并不像我想要的那么具体。我想尽可能清楚地检查arr传递给is 3 个元素(在编译时)。Pixel::from<&[u8]>()
想到了assert!(arr.len()==3),但这在运行时检查。
所以我想也许我可以通过( Playground )进行转换:
impl From<[u8; …Run Code Online (Sandbox Code Playgroud)