Seite 1 von 1

Char Array definieren mit Hex

Verfasst: Fr Aug 27, 2021 4:27 pm
von darkwin
Hallo, ich habe gelernt das ich ein Char wie folgt definieren kann:

Code: Alles auswählen

char kb[4] = {0x58, 0x4d, 0x53, 0x00};
oder 
char kb[4] = "XSM";
Ich kann auch ein Char Array mit 3 Feldern definieren.

Code: Alles auswählen

char *const_text[][3] = {
  {"300","kb up","text2" },
  {"301","kb down","text3"}
};
Wenn ich aber folgendes versuche bekomme ich eine Fehlermeldung:

Code: Alles auswählen

char *const_text[][3] = {
  {"300","kb up",{0x58, 0x4d, 0x53, 0x00} },
  {"301","kb down","text3"}
};
Kann mir jemand sagen wir ich ein Feld mit mit Hex Code füllen kann?

Re: Char Array definieren mit Hex

Verfasst: Fr Aug 27, 2021 6:36 pm
von darkwin
OK ich habe eine Antwort gefunden. Falls es jemand sucht, hier ist die Lösung.

Code: Alles auswählen

char *const_text[][3] = {
  {"300","kb up","\x58\x4d\x53\x00" },
  {"301","kb down","text3"}
};

Re: Char Array definieren mit Hex

Verfasst: Fr Aug 27, 2021 7:24 pm
von Xin
Zweitens finde ich das eine sehr interessante Frage - schon alleine, weil ich selbst erstmal etwas ahnunglos davor saß...
Aber erstmal:
darkwin hat geschrieben:
Fr Aug 27, 2021 4:27 pm
Wenn ich aber folgendes versuche bekomme ich eine Fehlermeldung:
Wenn Du schon eine Fehlermeldung bekommst... schreib sie doch bitte dazu!

Zurück zu zweitens:
darkwin hat geschrieben:
Fr Aug 27, 2021 4:27 pm
Hallo, ich habe gelernt das ich ein Char wie folgt definieren kann:

Code: Alles auswählen

char kb[4] = {0x58, 0x4d, 0x53, 0x00};
oder 
char kb[4] = "XSM";
Okay, was passiert hier: Hier wird auf ein Array von vier Zeichen 4 integer draufkopiert, die maximal 8 Bit breit sind - die also problemlos als char durchgehen. Das passt. Links ein char Array mit vier Zeichen, da passen vier Zeichen rein. Beim zweiten wird auf ein Array mit vier Zeichen das drauf kopiert, wohin "XSM" zeigt, also erstmal das X und dann die weiteren Zeichen bis das Array voll ist. Hier wird schon ein bisschen implizit getrickst. Rechts ist eigentlich ein Pointer auf const char, kein Array, aber C/C++ macht das so, dass es für Dich praktischer ist und leicht zu lesen. Es sind aber nicht gleiche Datentypen!
darkwin hat geschrieben:
Fr Aug 27, 2021 4:27 pm
Ich kann auch ein Char Array mit 3 Feldern definieren.

Code: Alles auswählen

char *const_text[][3] = {
  {"300","kb up","text2" },
  {"301","kb down","text3"}
};
Hier ist etwas anders: Das hier ist kein Char Array, sondern es ist ein Array von drei Char-Pointern! Da steht char * vorne!
darkwin hat geschrieben:
Fr Aug 27, 2021 4:27 pm
Wenn ich aber folgendes versuche bekomme ich eine Fehlermeldung:

Code: Alles auswählen

char *const_text[][3] = {
  {"300","kb up",{0x58, 0x4d, 0x53, 0x00} },
  {"301","kb down","text3"}
};
Und hier müssen drei Char * im Dreier-Array sein. {0x58, 0x4d, 0x53, 0x00} ist aber vom Typ int[4]. Das wird gerne und häufig wie ein Pointer verstanden, aber es ist nunmal kein Pointer. Und vor allem weiß er nicht, dass diese vier integer, die da stehen als Text aufgefasst werden sollen.
Hier muss von int[4] auf char* konvertiert werden. Das geht nicht. Wir können den Quelltext verkürzen.

Code: Alles auswählen

char * bla = {0x58, 0x4d, 0x53, 0x00};
und bekommen die Fehlermeldung

Code: Alles auswählen

<source>:1:8: error: excess elements in scalar initializer
.

Ein (1!) Pointer kann nur mit einem (1) Pointer initialisiert werden, nicht mit vier Integern.

Code: Alles auswählen

char * bla = nullptr;
darkwin hat geschrieben:
Fr Aug 27, 2021 4:27 pm
Kann mir jemand sagen wir ich ein Feld mit mit Hex Code füllen kann?
Kann ich, aber das hast Du ja schon selbst gefunden. :-D
Die Strings in Anführungszeichen sind dann wieder vom Typ (char const *) - das passt (wenn Du als Typ char const * wählst).