如何从&[u8]提取十进制数并与整数比较?无需转str的方法
无需转字符串直接将字节捕获组转为整数的方法
当然有办法直接处理字节数组完成转换,因为你的捕获组是ASCII数字字节(b'0'到b'9'),每个数字字节减去b'0'就能得到对应的数值,完全不需要先转成字符串。
实现示例
修改你代码里的转换逻辑即可:
use bytes::Bytes; use regex::bytes::Regex as BytesRegex; fn main() { let val = b"2020-01-01"; let my_regex = BytesRegex::new(r"\d{4}-(\d{2})-\d{2}").unwrap(); let month_bytes = my_regex.captures(val).unwrap().get(1).unwrap().as_bytes(); // 直接处理两位数字字节 let month_digit = (month_bytes[0] - b'0') * 10 + (month_bytes[1] - b'0'); println!("month smaller than 12: {}", month_digit <= 12); }
扩展说明
如果捕获的数字位数不固定,可以用迭代器遍历字节数组计算:
fn bytes_to_u8(bytes: &[u8]) -> u8 { bytes.iter().fold(0, |acc, &b| acc * 10 + (b - b'0')) } // 使用时: let month_digit = bytes_to_u8(month_bytes);
这种方式避免了字符串转换的开销,更高效,而且完全基于字节处理逻辑,符合你想要的需求。
内容的提问来源于stack exchange,提问作者ignoring_gravity
相关产品推荐
相关产品推荐

