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"
.
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"
.
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 0x
insbesondere 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 snprintf
zu.
– 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
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
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 – 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
Robson
Diese Antwort ist für diejenigen, die damit beginnen müssen string
in Dezimaldarstellung (nicht von int
).
int atoi( const char * str );
Funktionsprintf
Funktion mit %x
als Formatparameter und Sie integer als WertparameterHier 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;
}