gpt4 book ai didi

rust - 如何使用引用箱发出具有非十进制基数的整数文字?

转载 作者:行者123 更新时间:2023-12-03 11:24:47 25 4
gpt4 key购买 nike

我正在使用 quote生成代码来解码汇编操作。我的芯片的说明手册使用二进制值来描述操作,所以我希望我生成的代码也将文字表示为二进制值,以便我更容易地抽查正确性。
我找不到指定这一点的方法。 proc_macro2::Literal 提供了多种控制文字后缀的方法( u8i32 等),但我没有看到任何可以控制文字后缀的方法。
我的理想格式是基数 2,每四位使用一个下划线,并以适当的后缀结尾,但只需要基数。

use quote::quote; // 1.0.6

fn main() {
let value = 0b0101_0101_u8;

let code = format!("{}", quote! { #value });

assert_eq!("0b0101_0101_u8", code);
}
thread 'main' panicked at 'assertion failed: `(left == right)`
left: `"0b0101_0101_u8"`,
right: `"85u8"`', src/main.rs:8:5

最佳答案

您可以使用 format! 将数字格式化为字符串然后构造一个 TokenStream从中,您可以在 quote! 中使用它:

use proc_macro2::TokenStream;
use quote::quote; // 1.0.6
use std::str::FromStr;

fn main() {
let value = 0b0101_0101_u8;
let value_formatted = TokenStream::from_str(&format!("0b{:08b}_u8", value)).unwrap();
let code = format!(
"{}",
quote! {
#value_formatted
}
);

assert_eq!("0b01010101_u8", code);
}
format!宏不支持下划线,但可以轻松扩展以使用自定义格式化程序插入它们。

关于rust - 如何使用引用箱发出具有非十进制基数的整数文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62724596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com