So drucken Sie 1 byte mit printf?
Ich weiß, dass bei der Verwendung von %x
mit printf()
wir drucken 4 bytes (ein int
im hexadezimal) vom Stapel. Aber ich möchte Druck nur 1 byte. Gibt es eine Möglichkeit, dies zu tun ?
Sie sollten tag die Sprache. Ist dieses C?
Ihre Annahme ist nicht richtig.
Ich habe den C-tag. Ich glaubst meine Antwort ist richtig, bitte downvote, wenn es nicht so ist.
nur ein byte können Sie das noch näher erläutern? ist es ein
Mögliche Duplikate von Drucken hexadezimale Zeichen in C
Ihre Annahme ist nicht richtig.
printf("%x", x)
druckt den Wert von x
in hexadezimaler form. Die Größe der x
wird davon ausgegangen, dass der Typ (int)
, aber es ist nicht unbedingt 4 bytes.Ich habe den C-tag. Ich glaubst meine Antwort ist richtig, bitte downvote, wenn es nicht so ist.
nur ein byte können Sie das noch näher erläutern? ist es ein
char
variable? oder ist es, dass Sie drucken möchten nur ein byte eines größeren Variablen?Mögliche Duplikate von Drucken hexadezimale Zeichen in C
InformationsquelleAutor ahg8tOPk78 | 2017-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Annahme:Sie drucken möchten, den Wert einer Variablen von 1 byte Breite, D. H.,
char
.Falls Sie eine
char
variable sagen,char x = 0;
und drucken möchten, den Wert, die Nutzung%hhx
Formatbezeichner mitprintf()
.Etwas wie
Sonst, aufgrund default argument promotion, eine Aussage wie
wäre auch richtig, da
printf()
wird nicht gelesensizeof(unsigned int)
aus stack, den Wert vonx
gelesen werden basierend auf der Art und es wird gefördert, um die erforderliche Art, sowieso.InformationsquelleAutor Sourav Ghosh
Müssen Sie vorsichtig sein, wie Sie tun dies, um zu vermeiden Undefiniertes Verhalten.
Der C-standard erlaubt es, den cast der
int
zu einemunsigned char
drucken Sie dann die byte-Sie wollen mit Zeiger-Arithmetik:Beachten Sie, dass
p[0]
undp[1]
sind Umgerechnet auf den größeren Typ (derint
), vor der Anzeige der Ausgabe.sizeof(int) == 1
. Vielleicht verwendenfor (size_t i = 0; i< sizeof foo; i++) printf("%x\n", p[i]);
zu drucken bytes - selbst wenn es nur 1.InformationsquelleAutor Bathsheba
Können Sie die folgende Lösung zum drucken von einem byte mit
printf
:InformationsquelleAutor macario
Wenn Sie möchten, drucken Sie ein einzelnes byte, der sich in einem größeren Wert geben, können Sie die Maske und/oder shift out der gewünschte Wert (z.B. int x = 0x12345678; x & 0x00FF0000 >> 16). Oder einfach nur das abrufen der benötigten byte durch Gießen der benötigten byte-Position mit Hilfe eines (unsigned) char-Zeiger und mit einem offset.
InformationsquelleAutor Ton Plooij