#byte-string #constant #size #value #compile-time #buffer #byte-size

nightly sizedbytes

Rust 宏,通过将常量字节数值注解到常量字节数组中

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2016年9月20日

#25#byte-size

Apache-2.0

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