Hallo Zusammen,
ich möchte gerne eine Zeichenkette des Typs char mit z.B. folgendem
Inhalt "1AD7C8" immer paarweise aufspliten also 1A D7 C8 und dann an
jedes Paar 0x voranstellen, so dass ma dies hier erhält 0x1A,0xD7,0xC8.
Wie kann man dies erreichen?
MfG
Hans
Dibo schrieb:
> Hallo Zusammen,>> ich möchte gerne eine Zeichenkette des Typs char mit z.B. folgendem> Inhalt "1AD7C8" immer paarweise aufspliten also 1A D7 C8 und dann an> jedes Paar 0x voranstellen, so dass ma dies hier erhält 0x1A,0xD7,0xC8.> Wie kann man dies erreichen?
Deine Zeichenkette ist sicherlich nicht vom Typ char, sondern vom Typ
char[], also ein Array von Charactern.
Du kannst also ganz normale Arrayzugriffe nehmen.
> Oh soory hab ich vergessen es ist C++
Wieso nimmst du dann char und nicht std::string?
(Mit std::string kann man genau dasselbe machen, nur benutzt man dann
nicht strlen sondern die Memberfunktion. Aber Arrayzugriff funktioniert
genau gleich)
Also ich als Gelegenheits-C-Programmierer finde das erste Beispiel
wesentlich übersichtlicher. Nur weil das zweite C++ nutzt, ist es noch
lange nicht besser vertständlich und/oder besser wartbar.
Wenn man C kennt und weniger C++, dann ist C++ natürlich kein Geschenk.
Wenn er aber eine C-Version hat und fragt, wie es denn in C++ mit
C++-Mitteln geht (so habe ich die Frage zumindest interpretiert,
wenn es in Richtung std::string gehen soll), dann gebe ich ihm halt C++.
Du magst C lieber? Damit habe ich kein Problem, nimm es doch.
Ich habe nie behauptet, daß meine Lösung irgendiwe schöner, bunter,
geiler oder basisdemokratischer wäre - es ist halt die C++-Art passend
zum C-Beispiel von KHB. Soll jeder nehmen was ihm gefällt, und das
andere in Grund und Boden verdammen.
Und ja, man kann es auch noch in ASM machen.
@Klaus
Das war kein Vorwurf an dich, sondern eher als allgemeiner Kommentar zum
Thema C oder C++ zu verstehen. Ich finde C deutlich einfacher als echtes
C++, wenn man nur selten programmiert.
... wenn man nur selten C++ programmiert.
Wenn man beides kann, hat die C++-Variante durchaus Vorteile.
Ich bin ja auch nicht irgendwie pikiert; nur war die Frage halt
konkret nach C++. Wer nicht will, muß es doch nicht so machen.
> irgendwie ist mir der C code sympatischer :-)
Mir nicht. In der Praxis hat man ja eher selten den Fall, dass man den
String direkt im Programm vorliegen hat, sondern ihn von irgendwoher
kriegt. Und dann kann std::string seine Vorteile so richtig ausspielen
:-) Mit C beginnt dann immer die Zitterpartie: Wie gross dimensionier
ich denn nun das Array.
Vielen Dank für die tollen Antworten. Ich habe jetzt Lösungsvorschlag
Nummer 2 verwendet der funktioniert einwandfrei.
Meine nächst Frage wäre, wie übergebe ich das HexByte an ein Array?
Das Array erwartet folgende Werte unsigned char
array[]={0x1A,0xD7,0xC8};
Dibo schrieb:
> Vielen Dank für die tollen Antworten. Ich habe jetzt Lösungsvorschlag> Nummer 2 verwendet der funktioniert einwandfrei.> Meine nächst Frage wäre, wie übergebe ich das HexByte an ein Array?> Das Array erwartet folgende Werte unsigned char> array[]={0x1A,0xD7,0xC8};
Kannst du bitte das nächste mal deine Frage gleich richtig und
vollständig formulieren.
Du willst in Wirklichkeit gar nicht das, was du in deiner Anfrage
gefragt hast.
Was du willst ist:
Du bekommst einen String.
Aus dem String sind jeweils 2 Zeichen zu entnehmen, diese Zeichen als
Hex-Zahl zu interpretieren und in einem Array abzuspeichern.
Wichtig ist der Teil: Als Hex-Zahl zu interpretieren bzw. in eine solche
umzuformen
Danke für die Antwort.
Mein String Array das ich habe ist schon in Hex codiert und ich möchte
immer paaweise 0x davor schreiben wie es deine Funktion weiter oben
schon macht und diese dann dem Array übergeben. Muss man bei dem
übergeben an das Array auch Kommas mitübergeben weil ich muss in Main
die Eingabe unsigned char array[]={0x1A,0xD7,0xC8}; machen damit dieses
Codes im PDU Format zu ASCII convertiert werden.
Dibo schrieb:
> Danke für die Antwort.> Mein String Array das ich habe ist schon in Hex codiert und ich möchte> immer paaweise 0x davor schreiben wie es deine Funktion weiter oben> schon macht und diese dann dem Array übergeben. Muss man bei dem> übergeben an das Array auch Kommas mitübergeben weil ich muss in Main> die Eingabe unsigned char array[]={0x1A,0xD7,0xC8}; machen damit dieses> Codes im PDU Format zu ASCII convertiert werden.
Oh Mann.
Kannst du bitte deine Informationen alle auf einmal geben und nicht in
Scheibchen?
Du willst also C-Quelltext erzeugen, oder was?
Dibo schrieb:
> ich habe diese funktion nicht selber geschrieben. in der main ist es so> beschrieben die werte so zu übergeben damit sie richtig convertiert> werden.
Ich denke, du solltest erst mal C lernen.
Einem Array kann man nichts 'übergeben'. In ein Array werden Werte
geschrieben.
OK sorry wenn ich wenn umständlich ausgedrückt habe, ich möchte die
Werte 0x1A,0xD7,0xC8 in das Array schreiben so dass das selbe bewirkt
wird wie ein Aufruf in Main mit unsigned char array[]={0x1A,0xD7,0xC8};
Das Array wird dann in einer Funktion convert(array,länge,&speicherort)
übergeben.
Ich denke, was dir fehlt ist die Erkentnis, dass 0x1A nur eine bestimmte
Schreibweise für eine Zahl ist.
In
1
intmain()
2
{
3
unsignedchararray[]={0x1A,0xD7,0xC8};
wird im Array nicht "0x1A" gespeichert, sondern eine Zahl in ihrer
Binärform. Ob man die Zahl 26 als 26 schreibt oder als 0x1A ist Jacke
wie Hose. Es ist in beiden Fällen dasselbe Bitmuster, welches in beiden
Fällen dieselbe Zahl repräsentiert. Obiges ist völlig gleichwertig zu
1
intmain()
2
{
3
unsignedchararray[]={26,215,200};
D.h. die Lösung, die aus dem String die Zahlen generiert und im Array
ablegt, ist schon das was du willst.