You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从&[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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 10:20:19