Нет.
Макросы Rust могут обрабатывать и генерировать только целые токены, а не фрагменты токенов.Что-то вроде 7b
не является токеном, поэтому вы не сможете написать макрос, который бы ему соответствовал.
Кажется, что основная причина использования этого макроса в C состоит в том, чтобы сделать число болееудобочитаемый.В Rust это не обязательно, потому что в числовых литералах допускается подчеркивание.Таким образом, вы можете просто написать 0x7b_b0_b0_cb
.
Вы можете аппроксимировать исходный макрос, принимая числа и делая математику, что-то вроде следующего:
macro_rules! gen_hex_num {
($a:expr, $b:expr, $c:expr, $d:expr) => {
($a << 24) | ($b << 16) | ($c << 8) | ($d)
}
}
Но вы должны называть это какgen_hex_num!(0x7B, 0xB0, 0xB0, 0xCB)
, что, вероятно, побеждает цель.