Printhex in gcc

Gast #4834428
Ich will eine zahl gröesser 2^32 in gnu cc in Hexformat ausgeben.

unsigned long long int val = 4 295 000 000;
val ist dann wohl unsigned long long int? also bis 64 bit.

printf ("%o2x",val);

Gibt: Typen passen nicht.

Bei unsigned int val = 2561;

geht printf ("%o2x",val); (hex a01)
M.
Gast
Hallo Matthias,

ich kann aus deinem Beitrag leider nicht genau erkennen was du meinst.
Folgendes compiliert bei mir ohne Warnung oder sonstiges:
1
   unsigned long long int val = 4295000000;
2
   printf ("%llx",val);
Persönliche Seite
matthias schrieb:
> Ich will eine zahl gröesser 2^32 in gnu cc in Hexformat ausgeben.
>
> unsigned long long int val = 4 295 000 000;
> val ist dann wohl unsigned long long int? also bis 64 bit.

Ja, es ist größer als 2^32-1 = 4 294 967 295.

Ob es long long sein muss, hängt von der ABI ab.  Auf LP64 genügt long, 
auf ILP64 genügt int um einen 64-BIt Wert darzustellen.

> printf ("%o2x",val);

Um einen unsigned long long als hex auszugeben:
  
1
#include <stdio.h>
2

3
int main ()
4
{
5
    printf ("%llx", -1ull);
6
}
 
um einen unsigned 64-Bit Wert als hex auszugeben:
 
1
#include <stdio.h>
2
#include <inttypes.h>
3

4
int main ()
5
{
6
    printf ("%" PRIx64, UINT64_C (-1));
7
}
 
Beides erfordert mindestens C99.
Gast
ja danke auf llx wär ichnicht gekommen
so was wie "lllx" für __int128 Typen musste ich mir selber schreiben 
also ein printf_128 in dezimal.
Thx

//        \\\//
//        (o|o)
// --o00o-------oOOo--------------------
// printf_128
// -------------------------------------

void printf_128(__int128 path)
{

// Ausgabe int128 im Dezimalformat
// jeweils 6 Ziffern durch Kommata getrennt

int ziffer[42];
int cnt = 0;
int loop;
if (path ==0) printf ("0");
while (path>0)
        {
        ziffer[cnt]=path%10;
        path=path/10;
        cnt++;
        }

for (loop = cnt-1;loop>=0;loop--)
        {
        printf("%i",ziffer[loop]);
        if ( (loop%6==0) && (loop>0) )
                printf(",");
        }
}
Persönliche Seite
Abgesehen davon, daß die Verwendung von printf für die Ausgabe 
einzelner Zeichen recht ineffizient ist (ein simples putc würde hier 
genügen*), kann diese Routine nichts mit negativen Zahlen anfangen - sie 
ist also bestenfalls für uint128_t, aber nicht für int128_t geeignet.

*) Für die Ausgabe einer Zahl zwischen 0 und 9 so:
putc(zahl + '0');

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 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.