如何提取usize字节并返回它们?

时间:2016-08-22 20:22:19

标签: arrays rust type-conversion

我正在尝试提取usize的字节以在u8数组中检索它们,但似乎无法初始化具有“运行时已知”大小的数组。

这是我的代码:

use std::mem;
use std::mem::transmute;

fn encodeString(value: &str) {
    let length: usize = value.len(); // retrieval of the size
    let lengthSize: usize = mem::size_of_val(&length); // I am on 64-bit so it is 8

    let lengthBytes: [u8; lengthSize] = unsafe { transmute(lengthSize.to_be() }; // BAM. Does not want to compile because of the lengthSize
}

fn main() {
    encodeString("Coucou");
}

我尝试使用lengthSize代替constlet变量设置为常量,但是,正如您将注意到的那样,我有一个错误,即它不是“常量”。< / p>

因为我没有成功地做我想要的事情,所以我尝试了另一种方法,使用Vec但是...我有另外一个关于它的大小的错误,我没有找到我如何强制使用{ {1}}仅包含8个Vec条目:

u8

也许我将let lengthBytes: Vec<u8> = unsafe { transmute(length.to_be()) }; // BAM. 15:50 error: transmute called with differently sized types: usize (64 bits) to std::vec::Vec<u8> (192 bits) [E0512] 转换为字符串,然后将其转换回usize数组?但这似乎是......过度杀伤。

====我的解决方案

所以......我通过旋转位找到了另一种方法。这是我的代码:

u8

以字节为单位拆分usize的函数是splitToVector,它返回u8的向量,因为在运行时无法定义数组的长度(如Shepmaster提供的这篇文章中所定义的那样:How to set a Rust array length dynamically

0 个答案:

没有答案