rust - 如何在 Rust 中将字节格式化为 2 位十六进制字符串

标签 rust string-formatting

<分区>

通常需要将一个字节打印为 2 个十六进制数字,例如 10 应该给出 0x0a。在 Rust 中,人们会使用类似 println!("{:#02x}", 10) 的东西,但它会给出 0xa

我尝试过的事情列表(使用来自 std::fmtfmt::LowerHex 的信息以及几个 StackOverflow 问题):

println!("{:#02x}", 10);
println!("{:#0x}", 10);
println!("{:#x}", 10);
println!("{:#x?}", 10);
println!("{:#0x?}", 10);
println!("{:#02x?}", 10);

它们都输出 0xa,而不是 0x0A 的预期行为。


此问题已被编辑(删除相关情绪),随后被标记为与其他问题重复。但是其他答案没有解决为什么上面的列表不起作用。 # 格式选项会导致意外输出 (0xa),尤其是 02一点效果都没有! 没有其他问题关注此问题,也没有特别关注 #

最佳答案

std::fmt 中所述模块:

# - This flag is indicates that the "alternate" form of printing should be used. The alternate forms are:

  • #x - precedes the argument with a 0x
  • #X - precedes the argument with a 0x

这与请求宽度相互作用,因为宽度占整个替换,因此 0x0a4 个字符,而不是 2 个。

如果您请求的宽度小于必要的宽度,则请求的宽度将被忽略,而是使用最小宽度(此处为 3 个字符)。

快速实验 on the playground :

fn main() {
    println!("{:#01x}", 10);
    println!("{:#02x}", 10);
    println!("{:#03x}", 10);
    println!("{:#04x}", 10);
    println!("{:#05x}", 10);
    println!("{:#06x}", 10);
}

打印:

0xa
0xa
0xa
0x0a
0x00a
0x000a

一切顺利

关于rust - 如何在 Rust 中将字节格式化为 2 位十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485167/

相关文章:

rust - 为什么不能在同一结构中存储值和对该值的引用?

c++ - C++ 格式化库通常会回退到 *sprintf 进行数字格式化吗?

error-handling - 源错误是否应该在显示输出中包含该源?

rust - 如何处理 gtk 应用程序中的命令行参数?

rust - 如何使用普通结构构造函数创建具有关联类型的值?

c# - 序列不连续

python - 如何将 python 日期时间转换为具有可读格式日期的字符串?

Python - 使用格式字符串长度变量而不是固定的?

python - 在 string.format() 中使用 JSON 对象?

generics - 为什么 `&(?Sized + Trait)`无法转换为 `&dyn Trait`?