Oříznutí pole chrar

Odpovědět
Uživatelský avatar
Diego
Příspěvky: 166
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Oříznutí pole chrar

Příspěvek od Diego » 20 pro 2021, 21:22

Ahoj všem, potřeboval bych radu. Mám v projektu pole char znaků do kterého načítám data. Data jsou ve formátu -"Tohlemenezajima tohlechci". A já potřebuju oříznout "Tohlemenezajima" aby mi zůstalo pole jen s "tohlechci". To co mě nezajímá má pevnou délku a to co chci může být od 1 byte do teoreticky neomezeně.
Snad se to dá pochopit.
Je na to nějaký jednoduchý ,ideálně ,postup?
Díky
https://arze.cz - ARduino Zapojení Elektronika

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Oříznutí pole chrar

Příspěvek od jankop » 20 pro 2021, 21:27

Když nezajímavá data mají pevnou délku, tak prostě začni ukládat do pole až platná data.

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Oříznutí pole chrar

Příspěvek od peterple » 20 pro 2021, 22:43

Kedže MCU zatiaľ nevie veštiť tak musí existovať nejaký prísne logický spôsob ako určiť kde začína to tvoje "Tohlemenezajima"
Potom môžeš nasadiť predošlú radu. Ak sa prenáša v ASCII tak takým znakom býva zvyčajne znak CR, alebo LF, alebo oba. Ak sa prenášajú binárne data tak sa to robí všelijako. Napríklad unikátnou hlavičkou, špeciálnym bitom (9 bitový prenos namiesto 8). Medzerou vo vysielaní, prípadne štarovacím bitom špeciálnej dĺžky. Možností je veľa. CR je najjednoduchší.

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Oříznutí pole chrar

Příspěvek od peterple » 20 pro 2021, 23:49

Pozrel som si projekt ktorý robíš. Kedže ide o prácu s terminálom a teda vo formáte ASCII tak ako oddelovač asi používaš znak ENTER teda CR v ASCII.
Ak už máš znaky riadka uloženého v poli a nezaujímajú ťa nejaké znaky tak ich preskočíš jednoduchým pričítaním počtu znakov ktoré chceš preskočiť. A to aj v prípade že k poľu pristupuješ cez index, alebo aj ukazateľ.

Kód: Vybrat vše

char buffer[128];
char c;
char *p; //ukazatel
int i;  //index
i=0;
c=buffer[i]; //prvy znak pola
i+=10;
c=buffer[i]; //desiaty znak pola
p=buffer;
c=*p; //prvy znak pola
p+=10;
c=*p; //desiaty znak pola

Uživatelský avatar
Diego
Příspěvky: 166
Registrován: 23 črc 2017, 09:43
Reputation: 0
Kontaktovat uživatele:

Re: Oříznutí pole chrar

Příspěvek od Diego » 21 pro 2021, 05:40

Díky za rady, asi to udělam podle poslední rady, zkopíruju si to do novího pole posunutý o délku těch nezajímavých dat.
Díky

PS: Ono ty nezajímavý data mají samozřejmě svůj účel, je to v podstatě hlavička která říká co je dál. Ta se zpracovává jinde ale protože je na začátku a má pevnou délku tak to není problém. :)
https://arze.cz - ARduino Zapojení Elektronika

peterple
Příspěvky: 156
Registrován: 22 zář 2021, 20:20
Reputation: 0

Re: Oříznutí pole chrar

Příspěvek od peterple » 21 pro 2021, 10:42

Nie celkom mi je jasný zmysel takéhoto počinu. Čo získaš tým že niečo čo máš už v poli prekopíruješ niekam inam? Zase to bude len pole na nejakej adrese. To si to môžeš rovno posunúť v tom pôvodnom poli pomocou memmove, ale to je úplne zbytočné. Zvyčajne sa data preliezajú tak že sa na ne len ukazuje ukazateľmi, alebo indexami. (Ukazatele sú efektívnejšie).

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Oříznutí pole chrar

Příspěvek od kiRRow » 21 pro 2021, 19:09

Já jenom, takovej hloupý dotaz ... ono, když se někde jinde zpracuje ta hlavička, aby se vědělo co dál ... nemůže se tam i zpracovat zbytek onoho datagramu ? když už se ví co dál, proč zbytek dat rovnou nenaskládat někam do paměti, kde si je vyzvednu později ?

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 16 hostů