如何在Rust中无需手动赋值构建含32-126 ASCII字节的const数组
在Rust中无需手动编写值构建大型const数组的方法
如果你需要构建一个包含ASCII 32到126(共94个值)的[u8; 94]常量数组,且希望完全静态实现、无需逐个手动写入值,可以用以下两种方式:
方法一:自定义const函数生成数组
通过编写const函数,在编译时完成数组的填充:
const fn generate_valid_bytes() -> [u8; 94] { let mut arr = [0; 94]; let mut i = 0; while i < 94 { arr[i] = 32 + i as u8; i += 1; } arr } const VALID_BLOCK_BYTES: [u8; 94] = generate_valid_bytes();
这个函数会在编译时初始化数组,循环为每个索引位置计算对应的值(32到126),最终生成目标数组。
方法二:使用core::array::from_fn(Rust 1.59+)
Rust 1.59及以上版本支持const上下文的from_fn,可以更简洁地生成数组:
const VALID_BLOCK_BYTES: [u8; 94] = core::array::from_fn(|i| 32 + i as u8);
from_fn接受一个闭包,闭包参数是数组的索引i(从0到93),直接返回32 + i as u8即可生成对应的ASCII值数组。
这两种方式都能在编译时完成数组构建,完全满足静态实现的需求,运行时无需额外计算。如果只是需要判断字节是否在该范围内,使用Range<u8>的contains方法(O(1)复杂度)会更节省内存,但如果确实需要完整的数组集合,上述方法是最优选择。
内容的提问来源于stack exchange,提问作者Newb
相关产品推荐
相关产品推荐

