C Printf 2 Zahlen links- und rechtsbündig ausgeben mit 0er dazwischen

OP #7499269

Ich habe 2 Zahlen, die erste (eine ID) ist zwischen 1 und 8 Stellen lang und die 2. (Seriennummer) zwischen 1 und 12 Zeichen. Der Haken: aus historischen Gründen ist die ID linksbündig, also funktioniert %0 hier leider nur für die 2. Zahl (als %012d) Soll also am Ende z.B. so aussehen: 12345670000987654321 Gibt es eine einfache Möglichkeit, einen String am Ende mit beliebigen Zeichen (hier halt 0) auf eine fixe Länge aufzublasen? In C# gibts dafür StringPadRight()?

#7499729

Luky S. schrieb:

Danke, das ist für mich aber etwas zu viel Adress-magic in C.

Da ist /exakt gar keine/ "Adress-magic" vorhanden.

1
  int n = printf("%ld", a);

Das gibt den Wert "a" aus und liefert die Anzahl der ausgegebenen Stellen.

(Lass' Dich nicht vom l im Formatspezifizierer verwirren, der ist nur wegen des Datentyps /long/ anstelle von /int/ nötig)

1
  printf("%0*ld", 20-n, b);

Und das hier gibt den Wert "b" mit der angegebenen Stellenanzahl (20 - n) aus und zwar mit führenden Nullen.

Für die Werte unsigned long a = 1234567, b = 987654321;

ergibt sich also

n = 7 (da die Zahl sieben Stellen hat)

20 - 7 ist 13.

Die neunstellige Zahl b wird also mit vier vorangestellten Nullen ausgegeben.

Keine Adresse, nirgendwo. Auch keine Magie.

(Firma: egal) #7499785

Luky S. schrieb:

"%0*ld" verstehe ich nicht

Zitat daraus: "integer value or * that specifies minimum field width. The result is padded with space characters (by default), if required, on the left when right-justified, or on the right if left-justified. In the case when * is used, the width is specified by an additional argument of type int, which appears before the argument to be converted and the argument supplying precision if one is supplied. If the value of the argument is negative, it results with the - flag specified and positive field width (Note: This is the minimum width: The value is never truncated.). "

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 3 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.