Wie kann ich in C eine ganze Zahl in eine hexadezimale Zeichenfolge konvertieren?

Lesezeit: 4 Minuten

Benutzeravatar von user417894
Benutzer417894

Wie kann ich in C eine ganze Zahl in eine hexadezimale Zeichenfolge konvertieren?

Beispiel: Die Ganzzahl 50 würde in die hexadezimale Zeichenfolge konvertiert werden "32" oder "0x32".

Benutzeravatar von C Johnson
C Johnson

Dieser Code

int a = 5;
printf("%x\n", a);

Drucke

5

Dieser Code

int a = 5; 
printf("0x%x\n", a);

Drucke

0x5

Dieser Code

int a = 89778116;
printf("%x\n", a);

Drucke

559e7c4

Wenn Sie das x im Format groß schreiben, wird der Hex-Wert großgeschrieben:

int a = 89778116;
printf("%X\n", a);

Drucke

559E7C4

Wenn Sie Zeiger drucken möchten, verwenden Sie den p-Formatbezeichner:

char* str = "foo";
printf("0x%p\n", str);

Drucke

0x01275744

  • Ich würde die Verwendung empfehlen # Modifikator, anstatt einen eigenen zu schreiben 0xinsbesondere mit %p dessen Verhalten implementierungsdefiniert ist und möglicherweise bereits die enthält 0x für dich.

    – R.. GitHub HÖR AUF, EIS ZU HELFEN

    12. August 2010 um 3:34 Uhr

  • Möchte vielleicht erwähnen snprintfzu.

    – Nachzügler

    12. August 2010 um 4:25 Uhr

  • Außerdem ist das Format Ihrer Antwort mit den abwechselnden Blöcken verwirrend. Es kann sinnvoll sein, nur einen Codeblock mit den Ergebnissen als Kommentar nach der Anweisung zu haben.

    – Nachzügler

    12. August 2010 um 4:26 Uhr

  • @R .. Beachten Sie das mit #das "0x" wird nicht vorangestellt, wenn der Wert 0 ist. printf("%#X\n", 0); –> 0. Meiner Meinung nach, printf("0x%X\n", a); ist würdig, die zu halten x als Kleinbuchstaben und A-F als obere. 0x559E7C4

    – chux – Wiedereinsetzung von Monica

    15. Juni 2017 um 15:57 Uhr

Der folgende Code nimmt eine ganze Zahl und macht ein Schnur daraus im Hex-Format:

int  num = 32424;
char hex[5];

sprintf(hex, "%x", num);
puts(hex);

gibt

7ea8

Benutzeravatar von Jerry Coffin
Jerry Sarg

Normalerweise mit printf (oder einer seiner Cousins) mit der %x Formatbezeichner.

  • Vielleicht möchten Sie zumindest die Signatur oder einen Link zu einer Manpage für angeben strtol.

    – Nachzügler

    12. August 2010 um 4:28 Uhr

  • strtol() ist das Gegenteil von dem, wonach er gefragt hat. Das geht in die falsche Richtung.

    – Trade-Ideen Philip

    25. Februar 2017 um 18:43 Uhr

  • Sie können verwenden %X für eine Ausgabe in Großbuchstaben.

    Benutzer330606

    12. April 2020 um 20:20 Uhr

Benutzeravatar von dlb
dlb

Interessant, dass diese Antworten verwenden printf als wäre es gegeben.
printf wandelt die Ganzzahl in einen hexadezimalen Zeichenfolgenwert um.

//*************************************************************
// void prntnum(unsigned long n, int base, char sign, char *outbuf)
// unsigned long num = number to be printed
// int base        = number base for conversion;  decimal=10,hex=16
// char sign       = signed or unsigned output
// char *outbuf   = buffer to hold the output number
//*************************************************************

void prntnum(unsigned long n, int base, char sign, char *outbuf)
{

    int i = 12;
    int j = 0;

    do{
        outbuf[i] = "0123456789ABCDEF"[num % base];
        i--;
        n = num/base;
    }while( num > 0);

    if(sign != ' '){
        outbuf[0] = sign;
        ++j;
    }

    while( ++i < 13){
       outbuf[j++] = outbuf[i];
    }

    outbuf[j] = 0;

}

Ich habe eine Bibliothek erstellt, um Hexadezimal / Dezimal-Konvertierung ohne die Verwendung von durchzuführen stdio.h. Sehr einfach zu bedienen:

char* dechex (int dec);

Dies wird verwendet calloc() to , um einen Zeiger auf eine hexadezimale Zeichenfolge zurückzugeben, auf diese Weise wird die Menge des verwendeten Speichers optimiert, also vergessen Sie nicht use free()

Hier der Link auf github: https://github.com/kevmuret/libhex/

chux – Stellt Monicas Benutzeravatar wieder her
Chux – Wiedereinsetzung von Monica

Um eine Ganzzahl in a umzuwandeln Schnur beinhaltet auch char Array- oder Speicherverwaltung.

Um diesen Teil für solch kurze Arrays zu handhaben, könnte der Code a verwenden zusammengesetztes Literalseit C99, um Array-Platz zu schaffen, im Flug. Das Schnur gilt bis zum Blockende.

#define UNS_HEX_STR_SIZE ((sizeof (unsigned)*CHAR_BIT + 3)/4 + 1)
//                         compound literal v--------------------------v
#define U2HS(x) unsigned_to_hex_string((x), (char[UNS_HEX_STR_SIZE]) {0}, UNS_HEX_STR_SIZE)

char *unsigned_to_hex_string(unsigned x, char *dest, size_t size) {
  snprintf(dest, size, "%X", x);
  return dest;
}

int main(void) {
  // 3 array are formed v               v        v
  printf("%s %s %s\n", U2HS(UINT_MAX), U2HS(0), U2HS(0x12345678));
  char *hs = U2HS(rand());
  puts(hs);
  // `hs` is valid until the end of the block
}

Ausgabe

FFFFFFFF 0 12345678
5851F42D

Benutzeravatar von Robson
Robson

Diese Antwort ist für diejenigen, die damit beginnen müssen string in Dezimaldarstellung (nicht von int).

  1. Konvertieren Sie Ihre Zeichenfolgendarstellung der Zahl in einen ganzzahligen Wert (Sie können verwenden int atoi( const char * str ); Funktion
  2. Sobald Sie Ihre Ganzzahl haben, können Sie sie als HEX drucken, indem Sie beispielsweise Folgendes verwenden: sprintf Funktion mit %x als Formatparameter und Sie integer als Wertparameter

Hier ist ein funktionierendes Beispiel: https://ideone.com/qIoHNW

#include <stdio.h>
 
int main(void) { 
    int n;
    char hex_val[50];
 
    n = atoi("100663296");
    sprintf(hex_val, "%x", n);
 
    printf("%s", hex_val);
    return 0;
}

1408130cookie-checkWie kann ich in C eine ganze Zahl in eine hexadezimale Zeichenfolge konvertieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy