What is the easiest way to pad a string with 0 to the left?

21,527

Solution 1

The fmt module documentation describes all the formatting options:

Fill / Alignment

The fill character is provided normally in conjunction with the width parameter. This indicates that if the value being formatted is smaller than width some extra characters will be printed around it. The extra characters are specified by fill, and the alignment can be one of the following options:

  • < - the argument is left-aligned in width columns
  • ^ - the argument is center-aligned in width columns
  • > - the argument is right-aligned in width columns

assert_eq!("00000110", format!("{:0>8}", "110"));
//                                |||
//                                ||+-- width
//                                |+--- align
//                                +---- fill

See also:

Solution 2

As an alternative to Shepmaster's answer, if you are actually starting with a number rather than a string, and you want to display it as binary, the way to format that is:

let n: u32 = 0b11110000;
// 0 indicates pad with zeros
// 8 is the target width
// b indicates to format as binary
let formatted = format!("{:08b}", n);
Share:
21,527

Related videos on Youtube

SeaEyeHay
Author by

SeaEyeHay

Updated on June 07, 2020

Comments

  • SeaEyeHay
    SeaEyeHay almost 4 years

    What is the easiest way to pad a string with 0 to the left so that

    • "110" = "00000110"

    • "11110000" = "11110000"

    I have tried to use the format! macro but it only pads to the right with space:

    format!("{:08}", string);
    
  • Evan Carroll
    Evan Carroll over 2 years
    It would be nice to see here succinctly how to specify fill, width, alignment, and the user-specified variable in one go as variables to format!