Forum: Mikrocontroller und Digitale Elektronik C: große datenmenge in array


von snitch (Gast)


Lesenswert?

hi
ich möchte eine "größere" datenmenge am besten in ein array
speichern
konkret heißt das dass mir ein handy beispielsweise folgendes ausgibt:

+CMGR: 1,,20
069134660405F1040C98456317925805000040703871906280012D
OK
(das kommt erstmal in ein array)

und ich zum vergleichen dieser vom handy ausgegebenen daten ein array
verwende in die ich bereits diese daten vorher gespeichert habe

ich dachte mir zb ein unsigned char array mit 70 feldern müsste locker
ausreichen....nur wie diese daten darin speichern? (außer jedes feld
einzeln von hand zu beschreiben :))

das auslesen diese daten ins array is ok
das verlgeichen auch
nur eben wie ich vorher, damit ich vergleichen kann, diese datenmenge
in ein array bekomme ist mir schleierhaft.

thanx in advance

von Hans (Gast)


Lesenswert?

ich weis zwar nicht wie du auf die idee kommst eine sms mit einer
anderen zu vergleichen aber nun gut ;)

ich würd da einfach die make-file abändern und noch einen prog VOR dem
gcc starten lassen.. oder noch einfach batch file die make heist rein
ins project-dir

da drinnen machst dann

<<<<<<<<<<<<<snip>>>>>>>>
liebe_exe_die_aus_dem_string_ein_c_array_macht.exe
make.exe %1
<<<<<<<<<<<<snip>>>>>>>>>

die exe legt einfach eine cpp-file an wo dann das array definiert und
geladen wird..in welcher form is ja egal...

schaut dann ca so aus in der file...
<<<<<<<<<<snip>>>>>>>>>>>
unsigned char cArray[70];

void InitArray() {
  cArray[0]='zeichen1';
  cArray[1]='zeichen2';
  cArray[2]='zeichen3';
  cArray[3]='zeichen4';
  ...
  ...
}
<<<<<<<<<<<<<<<snip>>>>>>>>

das auszugeben sollte irgendwie schaffbar sein (würde sogar mit vbs
gehn)...

gut in deinem main rufst dann noch InitArray() auf und fertig ;)

brauchst nur die daten in eine text-file tun und das prog zerpflückt
das dann... wennst probs damit haben solltest... ich sollte heute abend
da was schönes bastln können....

73 de oe6jwf / hans

von Fritz Ganter (Gast)


Lesenswert?

Wenns in C sein soll:

char meinarray[]="+CMGR:
1,,20\n069134660405F1040C98456317925805000040703871906280012D\n
OK";

aber alles in einer Zeile.
Eventuell muss es ein \r\n statt einem \n sein.

eine andere Schreibweise wäre:
char meinarray[]={'+'.'C','M' ... };

Du brauchst in [] keine Grösse angeben, die weiss der Compiler.

von Fritz Ganter (Gast)


Lesenswert?

Hallo Hans!

Ich bin zwar auch Steirer, aber so kompliziert denk ich nicht, oder hab
ich was falsch verstanden? Bin grad erst auf und hatte erst einen
Kaffee.

von Hans (Gast)


Lesenswert?

najo ich mach das normalerweise so wenn ich binär daten hab... stimmt
strings dürften so am einfachstn sein... nur müsst ich da nachgucken ob
man auf die art und weise auch globale füllen darf....bin mir ned ganz
sicher...

btw warum einfach wenns kompliziert auch geht...

aja man kann das auch auf mehrere zeilen aufsplitten...


char meinarray[]="+CMGR:
1,,20\n069134660405F1040C9845631792580\
5000040703871906280012D\nOK";

damit gehts... und wenn du beim string der vom handy kommt noch alle
\r\n durch \n ersetzt (also einfach \r am uart ignorieren ;) ) dann
hast 0 probs... wäre mir nicht soo sicher ob alle handys \r\n oder nur
\n schicken...

dürfte der gleiche schrott wie unix/win sein....

so nachmal 73

btw weis eigentlich immer irgendwer was oe6 zu bedeuten hat g

von OldBug (Gast)


Lesenswert?

>ich weis zwar nicht wie du auf die idee kommst eine sms mit einer
>anderen zu vergleichen aber nun gut ;)

Hm, ganz einfach: eine Art "Remote-Shell" per SMS :D

von Fritz Ganter (Gast)


Lesenswert?

> btw weis eigentlich immer irgendwer was oe6 zu bedeuten hat *g*

Wenn man früher mal OE6FAD geheissen hat, dann schon :-)

von snitch (Gast)


Lesenswert?

thanx soweit
wo wir gerade dabei sind \n bzw. \r\n ist das line feed
und wie realisiert man eine neue zeile ?
zb
====
2345243524542254542

OK
====
2345243524542254542\n(??)OK

evtl. mit vertical tab ?

von OldBug (Gast)


Lesenswert?

\n : new-line, 0x0D
\r : return carrier, 0x0A

Was möchtest Du jetzt genau?

von OldBug (Gast)


Lesenswert?

>\n : new-line, 0x0D
>\r : return carrier, 0x0A

argh war wohl noch zu früh:

\n : new-line, 0x0A
\r : return carrier, 0x0D

Sorry for any inconvenience...

von Hans (Gast)


Lesenswert?

wenn du als client win rechner hast... dann musst du \r\n schicken
oder im terminal das umstellen... linux/unix will \n für new-line ;)

btw das mit der remote shell is prinzipiell eine gute idee...aber ich
würd da troztdem alles decodieren und nur text und nummer speichern..
sonnst hast mal ein anderes handy dabei und dann geht nix...sprich
authentifieren per sms und dann remote controllen ;)

nebenbei müsste da auch weniger speicher belegt werden... sprich
160zeichen+nummer max im gegensatz zu diversen längen und nummer und
text ;)

@ex 6AFD noch immer call oder zur ruhe gekommen ??? ;)


73 de oe6jwf / hans

von OldBug (Gast)


Lesenswert?

>wenn du als client win rechner hast... dann musst du \r\n schicken
>oder im terminal das umstellen... linux/unix will \n für new-line ;)

Viele Modems (naja, habe nicht wirklich viele gesehen, aber mindestens
die Siemens T/MC35 und auch die Wavecom) benötigen lediglich \r (!).
Steht aber im Datenblatt, vielleicht sollte man den AT-Layer etwas
flexibler gestalten...

von Hans (Gast)


Lesenswert?

hmmm so wie ich das sehe werde ich mal meine sms-routinen überarbeiten
;) da wird dann beim init mal at mit \r dann mir \n und
schlussendlich \r\n geschickt...dort wo was zurückkommt is dann das
richtige zeichen dabei g... najo mal schaun bis wann ich das alles
schön verpackt hab...

von Fritz Ganter (Gast)


Lesenswert?

@Hans

Ich bin schon langer nimmer aktiv, hab auch fast nur Packet Radio
gemacht. Das war aber zu einer Zeit als es Linux noch nicht gab. Da hab
ich TCP/IP online mitschauen können (WNOS hiess das glaub ich damals).

Ausserdem wohne ich jetzt in Deutschland, ich glaub da müsste ich
nochmal die Prüfung machen.

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.