gpt4 book ai didi

string - Rust 是否提供了一种直接从字节 (u8) 数组中的 ASCII 数据解析整数的方法?

转载 作者:行者123 更新时间:2023-11-29 07:45:10 24 4
gpt4 key购买 nike

Rust 有 FromStr ,但是据我所知,这只需要 Unicode 文本输入。 [u8] 数组是否有与此等效的方法?

我所说的“解析”是指获取 ASCII 字符并返回一个整数,就像 C 的 atoi 那样。

或者我需要...

  • 先将u8数组转换为字符串,然后调用FromStr
  • 调用 libc 的 atoi
  • 用 Rust 编写一个atoi

在几乎所有情况下,第一个选项都是合理的,但是在某些情况下,文件可能非常大,没有预定义的编码......或者包含混合的二进制和文本,其中最直接的是将整数读取为字节。

最佳答案

不,标准库没有这样的功能,但它不需要。

如评论中所述,原始字节可以通过以下方式转换为 &str:

  1. str::from_utf8
  2. str::from_utf8_unchecked

这些都不执行额外分配。第一个确保字节是有效的 UTF-8,第二个不是。每个人都应该使用已检查的表单,直到分析证明它是一个瓶颈,然后在证明安全后使用未检查的表单。

如果需要解析数据中更深的字节,则可以在转换前获取原始字节的切片:

use std::str;

fn main() {
let raw_data = b"123132";

let the_bytes = &raw_data[1..4];
let the_string = str::from_utf8(the_bytes).expect("not UTF-8");
let the_number: u64 = the_string.parse().expect("not a number");

assert_eq!(the_number, 231);
}

与其他代码一样,这些行可以提取到函数或特征中以允许重用。然而,一旦沿着这条路走下去,研究许多伟大的 crates aimed at parsing 中的一个是个好主意。 .如果除了文本数据之外还需要解析二进制数据,则尤其如此。

关于string - Rust 是否提供了一种直接从字节 (u8) 数组中的 ASCII 数据解析整数的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39404265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com