相关疑难解决方法(0)

如何在Rust中将切片作为数组?

我有一个未知大小的数组,我想获得该数组的一部分并将其转换为静态大小的数组:

fn pop(barry: &[u8]) -> [u8; 3] {
    barry[0..3] // mismatched types: expected `[u8, ..3]` but found `&[u8]`
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

arrays rust

36
推荐指数
5
解决办法
2万
查看次数

如何在Rust中获得一片Vec <T>?

我在文档中找不到Vec<T>如何从指定范围中检索切片.

标准库中是否有类似的东西:

let a = vec![1, 2, 3, 4];
let suba = a.subvector(0, 2); // Contains [1, 2];
Run Code Online (Sandbox Code Playgroud)

vector rust

31
推荐指数
2
解决办法
2万
查看次数

为什么我需要导入特征以使用它为类型定义的方法?

我有一个非常简单的Rust代码示例,无法编译:

extern crate rustc_serialize;
use rustc_serialize::base64;

fn main() {
    let auth = format!("{}:{}", "user", "password");
    let auth_b64 = auth.as_bytes().to_base64(base64::MIME);
    println!("Authorization string: {}", auth_b64);
}
Run Code Online (Sandbox Code Playgroud)

编译错误:

error[E0599]: no method named `to_base64` found for type `&[u8]` in the current scope
 --> src/main.rs:6:36
  |
6 |     let auth_b64 = auth.as_bytes().to_base64(base64::MIME);
  |                                    ^^^^^^^^^
  |
  = help: items from traits can only be used if the trait is in scope
  = note: the following trait is implemented but not in scope, perhaps add a `use` …
Run Code Online (Sandbox Code Playgroud)

rust

17
推荐指数
1
解决办法
3686
查看次数

将`Vec <u16>`内容写入文件的正确方法是什么?

我在将Vec<u16>内容写入文件时遇到问题:

use std::fs::File;
use std::io::{Write, BufWriter};
use std::mem;

#[derive(Debug, Copy, Clone, PartialEq)]
pub enum ImageFormat {
    GrayScale,
    Rgb32,
}

#[derive(Debug, Copy, Clone, PartialEq)]
pub struct ImageHeader {
    pub width: usize,
    pub height: usize,
    pub format: ImageFormat,
}

pub struct Image {
    pub header: ImageHeader,
    pub data: Vec<u16>,
}

fn write_to_file(path: &str, img: &Image) -> std::io::Result<()> {
    let f = try!(File::create(path));
    let mut bw = BufWriter::new(f);
    let slice = &img.data[..];
    println!("before length: {}", slice.len());
    let sl: &[u8];
    unsafe { …
Run Code Online (Sandbox Code Playgroud)

rust

8
推荐指数
2
解决办法
3374
查看次数

如何从原始指针获取数组或切片?

我可以以某种方式获得一个数组std::ptr::read吗?

我想做一些接近的事情:

let mut v: Vec<u8> = ...
let view = &some_struct as *const _ as *const u8;
v.write(&std::ptr::read<[u8, ..30]>(view));
Run Code Online (Sandbox Code Playgroud)

哪个在此表单中无效(不能使用数组签名).

unsafe rust

5
推荐指数
1
解决办法
3630
查看次数

如何将 4 元素 &amp;[u8] 转换为 i32?

我有一个i32传递到我的键值数据库的。

let a = 1234i32;
db.put(&a.to_be_bytes());
Run Code Online (Sandbox Code Playgroud)

但我把它恢复为&[u8],如何将其转换回i32


更新:这个例子几乎满足了我的要求。

use std::convert::TryInto;

fn read_be_i32(input: &[u8]) -> i32 {
    i32::from_be_bytes(input.try_into().unwrap())
}
Run Code Online (Sandbox Code Playgroud)

unsafe rust

5
推荐指数
1
解决办法
3138
查看次数

如何将切片转换为数组引用?

我有一个,&[u8]并希望把它变成一个&[u8; 3]没有复制.它应该引用原始数组.我怎样才能做到这一点?

arrays slice rust

4
推荐指数
3
解决办法
1145
查看次数

当使用 ReadBytesExt 从字节切片中读取整数时,为什么会收到错误“不满足特征边界”?

以下 Rust 代码无法编译。

extern create byteorder;
use byetorder::{LittleEndian, ReadBytesExt};

fn main() {                                                                          
    let buf: [u8; 12] = [                                                                     
        0x00, 0x42, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x30,               
    ];
    let id = &buf[0..1].read_u16::<LittleEndian>();              }
Run Code Online (Sandbox Code Playgroud)

来自编译器的消息:

extern create byteorder;
use byetorder::{LittleEndian, ReadBytesExt};

fn main() {                                                                          
    let buf: [u8; 12] = [                                                                     
        0x00, 0x42, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x30,               
    ];
    let id = &buf[0..1].read_u16::<LittleEndian>();              }
Run Code Online (Sandbox Code Playgroud)

u16Stack Overflow 上有非常相似的问题,我已经评论过,但我的问题与那些问题略有不同,因为我试图从切片中读取 a 。在实践中,我不确定为什么我的例子有本质上的不同,我确信我错过了一些明显的东西。

具体来说,我不清楚我所得到的与此处接受的答案中的内容有何显着不同:

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

arrays casting reference slice rust

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

如何将整数向量与字节相互转换?

我如何转换Vec<u32>为字节,这样[1, 2, 4]应该给我[1, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0], 并获取逆字节并将它们转换回整数向量?

我只知道如何转换[u8; 4]成整数。

rust

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

标签 统计

rust ×9

arrays ×3

slice ×2

unsafe ×2

casting ×1

reference ×1

vector ×1