【发布时间】:2023-03-21 13:29:01
【问题描述】:
有没有办法从字面字节表达式构造一个const 整数,使用字节字符串或构造整数的宏?
例如:
const MY_ID: u16 = u16_code!(ID);
const MY_WORD: u32 = u32_code!(WORD);
const MY_LONG: u64 = u64_code!(LONGWORD);
或者类似的东西,传入b"ID"而不是ID? *
当传递错误数量的字符时,它也应该无法编译,当对文字字节字符串使用位移时,我无法弄清楚如何实现。
这是一个简单的示例,它在基本级别上工作,但无法确保正确大小的参数。
// const MY_ID: u16 = u16_code!(b"ID");
#[cfg(target_endian = "little")]
macro_rules! u16_code {
($w:expr) => { ((($w[0] as u16) << 0) | (($w[1] as u16) << 8)) }
}
#[cfg(target_endian = "big")]
macro_rules! u16_code {
($w:expr) => { ((($w[1] as u16) << 0) | (($w[0] as u16) << 8)) }
}
*查看相关问题:Is there a byte equivalent of the 'stringify' macro?
【问题讨论】:
-
当对文字字节字符串使用位移时,我不知道如何实现。提问时请提供此类以前的工作
-
@ker,我开始这样做,但随后将其中一个问题标记为移至“代码审查”,我发现如果我发布示例代码,答案过于集中在挑选幼稚的代码上,而不是什么可能的,尤其是当我的方法一开始可能是错误的时候。不过我不介意发布示例。
标签: rust byte constants data-conversion