相关疑难解决方法(0)

如何将一片字节(&[u8])的缓冲区转换为整数?

我正在从文件中读取原始数据,我想将其转换为整数:

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中做什么?

arrays casting slice rust

15
推荐指数
2
解决办法
9349
查看次数

暂时将[u8]转换为[u16]

我有一个[u8; 16384]和一个u16.我如何"暂时转换"数组,以便我可以同时设置两个u8s,第一个到最低有效字节,第二个到最高有效字节?

arrays casting unsafe rust

5
推荐指数
3
解决办法
3194
查看次数

如何将大型Vec <i32>切成&[u8]?

我不知道如何将a Vec<i32>转换为&[u8]切片.

fn main() {
    let v: Vec<i32> = vec![1; 100_000_000];
    let v_bytes: &[u8] = /* ... */;
}
Run Code Online (Sandbox Code Playgroud)

我想写一个大Vec<i32>文件到一个文件,所以我可以在将来阅读它.

rust

4
推荐指数
2
解决办法
1973
查看次数

如何用重复的 u16 值填充 [u8] 数组?

我正在寻找构建一个将被复制到 RAM 并发送到 LCD 驱动程序的数组。我希望能够传入一个颜色值 ( color: u16) 并使用它来填充数组。请注意,我正在使用#![no_std]因为这是用于嵌入式应用程序的。

显而易见的简单方法如下:

let mut block: [u8;256] = [0; 256];
for i in (0..block.len()).step_by(2) {
    block[i] = ((color && 0xFF00) >> 8) as u8;
    block[i+1] = (color && 0xFF) as u8;
}
Run Code Online (Sandbox Code Playgroud)

由于我更多的个人经验来自 C,我想知道是否有使用类型转换和转换的更好的解决方案。例如,使用 Rust 初始化 u16 数组并转换为 u8 数组:

let block_u16: [u16; 128] = [color; 128]
let block_u8 = block_u16 as [u8; 256];
Run Code Online (Sandbox Code Playgroud)

作为参考,目标函数原型为:

spi::setup_block(block: &[u8]);
Run Code Online (Sandbox Code Playgroud)

type-conversion type-punning rust rust-no-std

4
推荐指数
1
解决办法
242
查看次数