Zahlen als Zahl und String als ASCII in ein Array

Gast #2865501
Lesenswert?

Hallo,

ich habe gestern bereits einen etwas blöden Thread zu einem Problem mit 
einem String in einem Array geschrieben.

Das Problem sollte ich etwas besser ausführen:

Ich habe einen String, der wie foglt aussieht:

char string[7] = {"72 abcd"};

Der eigentlich auszuwertende Text ist "abcd" und die Zahl 72 soll als 
Steuerzeichen verwendet werden.

Konkret Gewünscht ist also, dass genau das folgende in dem Array 
drinsteht:

string: [7,2, ,a,b,c,d];

Problem ist nun aber, wenn ich die Zeile char string[7] = {"72 abcd"};
auswerte, dann stehen an den ersten beiden Positionen des Arrays eben 
nicht die Zahlen 7 und 2, sondern die ASCII-Representative dieser 
Zahlen...

Wie kann ich ein Array also so initialisieren, dass am Anfang Zahlen 
drin landen und auf den hinteren Plätzen mein String beretis 
ASCII-codiert?

mfg
#2865514
Lesenswert?

ASCII schrieb:

> Ich habe einen String, der wie foglt aussieht:
>
> char string[7] = {"72 abcd"};

Das ist dann aber kein String. Der 'String'  "72 abcd" ist nämlich 8 
Zeichen lang, wenn man das abschliessende \0 Zeichen mitzählt. Und ohne 
ist das nun mal kein String.

Also etwas besser aufpassen!


> Der eigentlich auszuwertende Text ist "abcd" und die Zahl 72 soll als
> Steuerzeichen verwendet werden.
>
> Konkret Gewünscht ist also, dass genau das folgende in dem Array
> drinsteht:
>
> string: [7,2, ,a,b,c,d];

Moment.
Soll das erste Byte den Wert 7 oder den Wert 72 haben?
Der erste zitierte Satz scheint genau letzteres anzudeuten

   char string[7] = { 72, ' ', 'a', 'b', 'c', 'd', '\0' };

wäre zb eine Möglichkeit.

Eine andere wäre es zb. in einer ASCII Tabelle nachzusehen, welches 
Zeichen den Code 72 hat und den String ganz einfach damit beginnen zu 
lassen.

  char string[] = { "H abcd" };

Der ASCII Code von 'H' ist 72.
#2865520
Lesenswert?

ASCII schrieb:
> char string[7] = {"72 abcd"};
das passt schonmal nicht, dieser String ist 8 Bytes lang (Terminierung)

> Wie kann ich ein Array also so initialisieren, dass am Anfang Zahlen
> drin landen und auf den hinteren Plätzen mein String beretis
> ASCII-codiert?
>
char string[] = {7,2,' ','a','b','c','d','\0'};

Verdammt zu langsam

Karl Heinz Buchegger schrieb:
>   char string[] = { "H abcd" };
>
> Der ASCII Code von 'H' ist 72.

Das ist geschickt :D
Gast #2865522
Lesenswert?

Stichwort wäre wohl

STRUCT  und dann ein array aus der Struct machen.
Du willst anscheinend einen Interger und eine String haben.
Dann würde es sich anbieten auch mit Integer und String zu arbeiten.
Ober bekommst Du den String "72 abcd" irgendwie über einen Schnittstelle 
herein und musst Ihn aufsplitten.

( p.s. Vielleicht doch mal in ein Buch schauen ;-)   )
#2865533
Lesenswert?

Timmo H. schrieb:

>>   char string[] = { "H abcd" };
>>
>> Der ASCII Code von 'H' ist 72.
>
> Das ist geschickt :D


Und lässt sich noch besser formulieren, wenn man ausnutzt, dass der 
Compiler einzelne String-Literale die direkt aufeinander folgen, erst 
mal zusammenhängen muss

1
#define COMMAND_1  "H"        // Code 71
2

3

4
char string[] =  COMMAND_1   " abcd";

Wobei:
Die Variante von "NurEinGast" wäre sowieso IMHO die bessere Alternative. 
Nur fürchte ich, dass der TO noch nicht soweit ist.
Gast #2865542
Lesenswert?

Freunde -lasst den Kollegen "ASCII" erst mal erzählen was er wirklich 
braucht.
Gestern hatten wir auch so einen Thread, wo jemand einen Integer 
gebraucht hätte ( I/O Port Nummer ) und ihn als String definiert hat und 
sich gewundert hat, dass er den String nicht einfach so als I/O Port 
Nummer verwenden kann.
Auf den Hinweis mal in ein Buch zu schauen und den Unterschied 
String/Integer zu lernen, hat der Kollege etwas verschnupft reagiert.
Ich muss zugebeben - ich fürchte dass hier ist das gleiche Thema.

Also lieber ASCII(Gast). Bitte erzähle uns mal was Du vorhast und was Du 
brauchst.
Gast #2865590
Lesenswert?

char string[7] = {"72 abcd"};

string[0] = string[0]-0x30;
string[1] = string[1]-0x30;

Wenn :
Die Zahl immer zweistellig ist
Immer in den ersten 2 Stellen des Strings ist.
Die Aktion nur einmal abgearbeitet wird.

Aber wie gesagt, ich bezweifle, dass wir das eigentlich wollen.
Gast #2865601
Lesenswert?

Wenn in string[1] eine "0" steht, dann hast Du recht, dann ist der 
String für die weitere normale Stringverarbeitung hier beendet.

Ist halt sehr sehr gut zu überlegen, ob man das so tun will.
Aber es ist das, was der TO gewollt hat.
--
-- Konkret Gewünscht ist also, dass genau das folgende in dem Array
-- drinsteht:
-- string: [7,2, ,a,b,c,d];

Ich halte es nicht für sinvoll !!!
#2865616
Lesenswert?

amateur schrieb:
> Kann man das nicht über "fscanf" machen?

Das hängt jetzt alles davon ab, was eigentlich das Ziel ist, bzw. wie 
dieser gepimpte String verwendet werden soll.

Und ich bin da schon auch bei "NurEinGast". Ehe man in diese Richtung 
weiter geht, sollte man erst mal die Frage stellen: Wie sinnvoll ist es, 
in den String solche speziellen Codes einzubringen.
Das kann durchaus sinnvoll sein, muss es aber nicht. Um das zu 
entscheiden, muss man mehr über die Aufgabenstellung wissen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren