You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Rust的quote!宏输出十六进制字面量?

如何让quote库保留十六进制数字的格式输出?

在嵌入式系统开发中使用quote库自动生成代码时,若希望数字以十六进制形式展示,默认的数字插值会将其转换为十进制,无法满足需求。以下是两种可行的解决方法:

方法一:将数值转为十六进制字符串后插值

直接把数值格式化为带0x前缀的十六进制字符串,再传入quote宏中:

use quote::quote;

fn main() {
    let value = 0x1005u16;
    // 生成带0x前缀和类型后缀的十六进制字符串
    let hex_repr = format!("0x{:X}u16", value);
    let tokens = quote! {
        let x = #hex_repr;
    }.to_string();
    println!("{}", tokens);
}

执行后输出:

let x = 0x1005u16 ;

方法二:使用proc_macro2::Literal构建字面量

通过proc_macro2::Literal明确指定字面量的格式,确保quote输出符合预期:

use quote::quote;
use proc_macro2::Literal;

fn main() {
    let value = 0x1005u16;
    // 从十六进制字符串创建Literal实例
    let hex_literal = Literal::string(&format!("0x{:X}u16", value));
    let tokens = quote! {
        let x = #hex_literal;
    }.to_string();
    println!("{}", tokens);
}

该方法同样会输出符合要求的十六进制格式代码。

原理说明

quote宏对数字类型的插值逻辑是输出其十进制数值表示,因此若要保留十六进制格式,必须以字符串或预定义字面量的形式传入,避免数值被自动转换。

内容的提问来源于stack exchange,提问作者sciencectn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 07:22:08