我正在编写一个库,用于对二进制格式的数据进行编码/解码.格式的一部分是数字,我使用锈病的本地原始类型(如i8,i64,f32等).
是否有这些数据类型转换成/二进制,即转换为一个简单的,内置的方式f64/ f32/ i64/等.变成了Vec<u8>?同样有没有办法将4 u8秒(在一个Vec<u8>说法中)转换为f32?
我正在从文件中读取原始数据,我想将其转换为整数:
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中做什么?
我正在寻找构建一个将被复制到 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)