web-dev-qa-db-fra.com

Quelle est la façon la plus simple de remplir une chaîne avec 0 à gauche?

Quelle est la façon la plus simple de remplir une chaîne avec 0 à gauche pour que

  • "110" = "00000110"

  • "11110000" = "11110000"

J'ai essayé d'utiliser le format! macro mais il ne garnit que vers la droite avec de l'espace:

format!("{:08}", string);
14
SeaEyeHay

La documentation du module fmt décrit toutes les options de formatage:

Remplissage/Alignement

Le caractère de remplissage est fourni normalement en conjonction avec le paramètre width. Cela indique que si la valeur en cours de formatage est inférieure à width, certains caractères supplémentaires seront imprimés autour d'elle. Les caractères supplémentaires sont spécifiés par fill, et l'alignement peut être l'une des options suivantes:

  • < - l'argument est aligné à gauche dans les colonnes width
  • ^ - l'argument est aligné au centre dans les colonnes width
  • > - l'argument est aligné à droite dans les colonnes width

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

Voir également:

24
Shepmaster

Comme alternative à la réponse de Shepmaster, si vous commencez en fait par un nombre plutôt qu'une chaîne et que vous souhaitez l'afficher en binaire, la façon de formater c'est:

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);
6
Peter Hall