Как мне сделать цитату! макрос печатать шестнадцатеричные литералы?

Я использую цитату для автоматического создания кода для использования во встроенной системе. Часть автоматически сгенерированного кода содержит числа, которые было бы легче читать в шестнадцатеричном виде.

Вот пример.

use quote::quote;

fn main() {
    let value = 0x1005;
    let tokens = quote! {
        let x = #value;
    }.to_string();
    println!("{}", tokens);
}

Это печатает

let x = 4101u16 ;

но я бы хотел, чтобы это было

let x = 0x1005u16 ;
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
0
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если вы проанализируете его из строки, он останется таким, каким вы его набрали:

use std::str::FromStr;
use quote::quote;

fn main() {
    let value = 0x1005;
    let value = proc_macro2::Literal::from_str(&format!("0x{value:x}i32")).unwrap();
    let tokens = quote! {
        let x = #value;
    }.to_string();
    println!("{tokens}");
}

Другие вопросы по теме