如何在没有额外分配的情况下将 u32 的字符串表示写入字符串缓冲区?

How to write string representation of a u32 into a String buffer without extra allocation?

我可以将 u32 转换为 String 并将其附加到现有的字符串缓冲区,如下所示

let mut a = String::new();
let b = 1_u32.to_string();
a.push_str(&b[..]);

但这涉及到在堆中分配一个新的字符串对象。

如何在不分配新 String 的情况下推送 u32 的字符串表示形式?

我应该从头开始实现一个 int-to-string 函数吗?

使用write!及其家族:

use std::fmt::Write;

fn main() {
    let mut foo = "answer ".to_string();

    write!(&mut foo, "is {}.", 42).expect("This shouldn't fail");

    println!("The {}", foo);
}

这会打印 The answer is 42.,并执行一次分配(显式 to_string)。

(Permalink to the playground)