Rust有FromStr,但据我所知,这只需要Unicode文本输入.对[u8]阵列有没有相同的东西?
通过"解析"我的意思是取ASCII字符并返回一个整数,就像C atoi一样.
或者我需要......
u8数组转换为字符串,然后调用FromStr.atoi.atoiRust.在几乎所有情况下,第一个选项都是合理的,但是有些情况下文件可能非常大,没有预定义的编码...或者包含混合二进制和文本,其中最直接的读取整数作为字节.
She*_*ter 11
不,标准库没有这样的功能,但它不需要.
如注释中所述,原始字节可以转换为&strvia:
这些都不会执行额外的分配.第一个确保字节是有效的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);
}
Run Code Online (Sandbox Code Playgroud)
与其他代码一样,这些行可以被提取到函数或特征中以允许重用.然而,一旦遵循这条路径,最好是研究一下旨在解析的许多伟大的箱子.如果除了文本数据之外还需要解析二进制数据,则尤其如此.
我不知道标准库中有什么方法,但也许atoi板条箱适合你?完全披露:我是它的作者。
use atoi::atoi;
let (number, digits) = atoi::<u32>(b"42 is the answer"); //returns (42,2)
Run Code Online (Sandbox Code Playgroud)
您可以检查元组的第二个元素是否为零,以查看切片是否以数字开头。
let (number, digits) = atoi::<u32>(b"x"); //returns (0,0)
let (number, digits) = atoi::<u32>(b"0"); //returns (0,1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4563 次 |
| 最近记录: |