0

我正在 Rust 中制作裸机应用程序。我可以轻松地让任何给定的结构打印其调试信息,但我希望其中一些以十六进制打印它们的一些值。

例如:

impl core::fmt::Debug for Task {
    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
        fmt.debug_struct("Task")
            // ...
            .field("SP", &self.context.sp)
            .field("KSP", &self.context.ksp)
            // ...
            .finish()
    }
}

我无法弄清楚如何制作spksp(两者i64)都打印为十六进制数字。我的第一个想法是以某种方式使用format!宏,但由于我使用的是#![no_std],我无权访问它。

如何使调试输出以十六进制打印这些值?

4

1 回答 1

1

您可以使用format_args!()宏。它是所有格式化机制的来源,但不分配,因此可用于core

impl core::fmt::Debug for Task {
    fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
        fmt.debug_struct("Task")
            // ...
            .field("SP", &format_args!("{:X}", self.context.sp))
            .field("KSP", &format_args!("{:X}", self.context.ksp))
            // ...
            .finish()
    }
}
于 2022-01-23T20:49:39.980 回答