Forum: Mikrocontroller und Digitale Elektronik Zahlen als Zahl und String als ASCII in ein Array


von ASCII (Gast)


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

von netdieter (Gast)


Lesenswert?

da gibt es sowas wie isNum. Damit prüfst Du ob Dein Char eine Zahl ist 
un konvertierst entsprechen.

von Karl H. (kbuchegg)


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.

von Timmo H. (masterfx)


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

von NurEinGast (Gast)


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 ;-)   )

von Karl H. (kbuchegg)


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.

von NurEinGast (Gast)


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.

von NurEinGast (Gast)


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.

von Ralf G. (ralg)


Lesenswert?

NurEinGast schrieb:
> string[1] = string[1]-0x30;

Dann ist aber der String mit Einerstelle '0' nach einem Zeichen zu Ende.
(Für die weitere normale Stringverarbeitung)

von NurEinGast (Gast)


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 !!!

von amateur (Gast)


Lesenswert?

Kann man das nicht über "fscanf" machen?

Etwas = fscanf ( Input , "%2d %c%c%c%c", &DummyNum, &FirstChar, 
&SecondChar, ...)

In dem Bereich gibt's 'ne Menge ähnlicher Funktionen.

von Karl H. (kbuchegg)


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.

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

Nun mag er nicht mehr, der ASCII (Gast)
Echt blöd, wenn Leute anfangen zu helfen und der Frager taucht einfach 
ab.
Nur weiter so. Irgendwann werden dann einfach alle
Anfängerfragen einfach ignoriert werden ....

Dabei gab's doch diesesmal sogar ne Copy&Paste Antwort,
so dass er nicht selbst denken oder gar lernen musste.

von Udo S. (urschmitt)


Lesenswert?

Frank W. schrieb:
> Dabei gab's doch diesesmal sogar ne Copy&Paste Antwort,
> so dass er nicht selbst denken oder gar lernen musste.

Also konnte er die einfach verwenden und brauchte nicht mal Danke zu 
sagen.

von Georg G. (df2au)


Lesenswert?

Da war doch mal was... in der Definition der Sprache "C"... oktale 
Konstanten...

char string[7] = {"\007\002 abcd"};

und schon hat er das Gewünschte.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.