1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2016年9月20日 |
---|
#25 在 #byte-size
6KB
rust-sizedbytes
Rust 宏,通过将常量字节数值注解到常量字节数组中
该功能允许在源代码中嵌入常量字节数组,并在编译时使用其字节数来声明其他具有特定预设大小的缓冲区。
示例 Cargo.toml
[dependencies]
bytestool = "0.2.0"
sizedbytes = "0.1.0"
示例 main.rs
#![feature(plugin)]
#![plugin(bytestool)]
#[macro_use(sized_bytes)]
extern crate sizedbytes;
use sizedbytes::SizedBytes;
fn main() {
const CONST_DATA : SizedBytes = sized_bytes!(b"0123456789"); // size 10, not nul-terminated
// equivalant to sized_bytes!([ 48u8, 49u8, 50u8, 51u8, 52u8 53u8 54u8, 55u8, 56u8, 57u8 ])
let runtime_bytes = b"0123456789";
let mut buffer : [u8; 2 * CONST_DATA.size ] = [0; 2 * CONST_DATA.size ];
for (i, char_byte) in CONST_DATA.bytes.into_iter().enumerate() {
buffer[i * 2] = *char_byte;
}
}
此功能类似于 C 中的功能,其中函数 'sizeof' 在编译时推导嵌入字符串的常量长度,可用于初始化其他具有特定常量大小的缓冲区。
const char CONST_DATA[] = "0123456789"; // size 11, as nul-terminated
/* equivalant to: char CONST_DATA[] = ['0','1','2','3','4','5','6','7','8','9', '\0'] */
const int N = sizeof(CONST_DATA) - 1;
// allocate on stack, preset during compile time
char buffer[N * 2];
int i=0;
for (i=0; i<N; ++i)
{
buffer[i*2] = CONST_DATA[i];
}
依赖项
~11KB