Char Array definieren mit Hex

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Char Array definieren mit Hex

Beitrag von darkwin » 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";
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?

darkwin
Beiträge: 26
Registriert: So Aug 08, 2021 4:37 pm

Re: Char Array definieren mit Hex

Beitrag von darkwin » Fr Aug 27, 2021 6:36 pm

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"}
};

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Char Array definieren mit Hex

Beitrag von Xin » Fr Aug 27, 2021 7:24 pm

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).
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten