首页 > 解决方案 > 如何将str更改为rust中的数组

问题描述

我将如何将 str 更改为字节或字符数组?

例如:
"1.1.1.1" -> ["1", ".", "1", ".", "1", ".", "1"]

该字符串是一个 ip,因此没有常用字符。

我试过做try_into()但是得到了

expected array `[u8; 10]`
  found struct `std::slice::Iter<'_, u8>`

任何指导将不胜感激。

编辑:在我的用例中,我有一个名为 Player 的结构:

struct Player {
    cards: [i32, 2],
    chips: u32,
    ip: [u8; 10],
    folded: bool,
    hand: u8,
}

而且我想将 id 设置为将接收的字符串并将其存储为数组。理想情况下,结构会impl复制,因此vec不能使用 a 。

正在制作的玩家:

Player {
   cards: [4,5],
   chips: 500,
   ip: "localhost", // how to change this to an array
   folded: false,
   hand: 0,
            }

标签: rust

解决方案


str是一种类型的特例slice。与数组不同的是,它在编译时没有已知的大小(即在程序执行期间动态计算),因此没有可靠的转换。但是您可以手动制作一个数组并迭代str以获取它的字节数:

let s = "1.1.1.1";

let mut your_array = [0u8; 10];

if s.len() != your_array.len() {
    // handle this somehow
}

s.bytes()
    .zip(your_array.iter_mut())
    .for_each(|(b, ptr)| *ptr = b);

推荐阅读