#hex #literals #proc-macro #hex-literal

no-std hex_lit

无需 hex 宏的十六进制字面量宏

2 个版本

0.1.1 2022 年 8 月 13 日
0.1.0 2022 年 8 月 13 日

#468Rust 模式

Download history 32841/week @ 2024-03-14 34793/week @ 2024-03-21 30218/week @ 2024-03-28 32549/week @ 2024-04-04 34284/week @ 2024-04-11 34907/week @ 2024-04-18 29795/week @ 2024-04-25 27840/week @ 2024-05-02 30846/week @ 2024-05-09 30868/week @ 2024-05-16 27690/week @ 2024-05-23 33154/week @ 2024-05-30 32255/week @ 2024-06-06 30778/week @ 2024-06-13 27995/week @ 2024-06-20 21556/week @ 2024-06-27

118,388 每月下载量
299 包 (10 个直接使用)

MITNFA 许可证

14KB
204

无需进程宏的十六进制字面量。

此包实现了不使用进程宏的最小化十六进制字面量宏。优点是编译时间更快,可以与不字面量 const 值一起工作,并且更容易审计。然而,由于使用了 const fn,包有一些限制,这取决于 Rust 版本。

无论如何,结果类型是字节数组 ([u8; N]),它不会强迫你写出它的长度。这已经非常有用了,因为编译器可以证明长度,并且你可以避免运行时分配。

该包是 no_std,并且不需要分配器。

用法

只需将一个 &str 常量(通常是一个字面量)传递给十六进制宏。

示例

use hex_lit::hex;

let array = hex!("2a15ff");
assert_eq!(&array, &[42, 21, 255]);

输入不得包含任何空格或其他分隔符,并且它必须具有偶数长度。请注意,您仍然可以使用 concat 宏将长字符串分成块

use hex_lit::hex;

let array = hex!(concat!(
    "0000002a000000",
    "ffffffffffffff",
));
assert_eq!(&array, &[0, 0, 0, 42, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255]);

依赖于 Rust 版本的功能

  • 1.41.1+ - MSRV,const 上下文中的使用是不可能的,只有 hex! 宏可用。
  • 1.46.0+ - const 上下文中的使用可用,并且在编译时检查输入的正确性(不考虑 cargo 功能)。
  • 1.57+ - 对不良输入有更友好的错误信息(不考虑 cargo 功能)

Cargo 功能

  • rust_v_1_46 - 承认将 MSRV 提高到 1.46+ 并启用 const 上下文中的使用。

提高 MSRV 是故意明确的。

由于改进了输入检查,建议使用 Rust 1.46+,最好在 CI 中使用 1.57+,即使您的目标 MSRV 较低。

许可证

MITNFA

无运行时依赖项