#u8 #parse #slice #byte-string #byte #parser

bstr_parse

增加了从&[u8]中解析数字的能力

1 个不稳定版本

0.1.0 2020年12月4日

#44#bytes

MIT/Apache

17KB
201

bstr_parse

增加了从&[u8]中解析数字的能力。如下所示

use bstr_parse::*;

let text: &[u8] = b"1234";
let num: u32 = text.parse().unwrap();
assert_eq!(num, 1234);

为什么?

当处理保证是纯ASCII的文本时,在&[u8]上运行的代码通常比在&str上运行的代码要快,因为这避免了所有与Unicode相关的开销。

所以使用这个crate会比str::parse更快吗?

不是的!这个crate中的代码是直接从std中复制出来的,只是做了一些最小修改。结果发现std中的解析算法已经能够处理&[u8],只是没有方法在不先获取一个&str的情况下调用它。

部分代码是从以下地址复制的

所以...为什么使用这个crate?

因为在解析文本时,你通常做的不仅仅是解析数字。许多其他常见的解析操作在&[u8]上比在&str上更快。然而,如果你需要解析数字以及其他这些内容,没有这个crate,你就必须完全在&str上进行操作,或者根据需要构造它们,每一步都可能产生(潜在的)不必要的Unicode开销。

我应该使用这个crate吗?

可能不是。在绝大多数使用场景中,正确处理Unicode的开销非常小,以至于无关紧要。我创建这个crate是为了专门针对基准测试游戏,在那里对性能进行微调,争取每一微秒的改进都是有价值的。

无运行时依赖