Есть ли способ выровнять по правому краю шестнадцатеричное число с "0x" в Rust? - PullRequest
3 голосов
/ 25 октября 2019

Я пытаюсь напечатать что-то вроде этого с помощью Rust:

Base:       0x40, length: 900
Base:     0x5500, length: 301

Прямо сейчас у меня есть:

println!("Base: {:>width$x}, length: {}", 67106, 54, width=10);
Base:      10622, length: 54

Есть ли способ заставить Rust включитьпрефикс "0x"? Эти два не компилируются:

println!("Base: {:>width#$x}, length: {}", 67106, 54, width=10);
println!("Base: {:>width$#x}, length: {}", 67106, 54, width=10);
error: invalid format string: expected `'}'`, found `'#'`
 --> src/main.rs:2:29
  |
2 |     println!("Base: {:>width#$x}, length: {}", 67106, 54, width=10);
  |                     -       ^ expected `}` in format string
  |                     |
  |                     because of this opening brace
  |
  = note: if you intended to print `{`, you can escape it using `{{`

error: invalid format string: expected `'}'`, found `'#'`
 --> src/main.rs:3:30
  |
3 |     println!("Base: {:>width$#x}, length: {}", 67106, 54, width=10);
  |                     -        ^ expected `}` in format string
  |                     |
  |                     because of this opening brace
  |
  = note: if you intended to print `{`, you can escape it using `{{`

Лучшее, что у меня есть:

println!("Base: 0x{:0>8x}, length: {}", 67106, 54);
Base: 0x00010622, length: 54

Что, вероятно, хорошо, но мне любопытно, если естьспособ сделать это. Кроме того, я подумал, что это может сработать, но не повезло:

println!("Base: {:>10}, length: {}", format_args!("{:#x}", 67106), 54);
Base: 0x10622, length: 54

1 Ответ

1 голос
/ 25 октября 2019
println!("Base: {:>#10x}, length: {}", 0x40, 900);

Вам нужно поставить # перед шириной, чтобы установить альтернативную форму. См. Синтаксис std::fmt для объяснения форматирования.

Если в качестве аргумента передано width, это будет:

println!("Base: {:>#width$x}, length: {}", 67106, 301, width=10);
...