www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

string vsv array of char
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
rafaellsi
Član
Član



Pridružen-a: Ned 11 Sep 2011 18:54
Prispevkov: 479
Aktiv.: 2.86
Kraj: Radovljica

PrispevekObjavljeno: Pet Jan 29, 2016 7:08 pm    Naslov sporočila:   Odgovori s citatom

Variant kako to izvesti je verjetno mnogo, katera je bolj pravilna oz. po PS-u pa ne bi vedel.

- če rabiš združevati stringe (tabele znakov) le za izpis, si lahko narediš tudi neko funkcijo, ki ti izpiše stringa enega za drugim, npr.:

Koda:
void IzpisiOba(char *n1, char*n2)  {
 Serial.print(n1);
 Serial.println(n2);
}

IzpisiOba(niz1, niz2);


- lahko uporabiš funkcijo strcat, ..., kjer prvemu nizu dodaš nekaj, npr;

Koda:

char niz1[] = "To je";
char niz2[] = "niz";
strcat (niz1,niz2);
Serial.println(niz1);
..


- deluje tudi funkcija sprintf(), kjer si lahko sestaviš poljuben nov niz

Koda:

char niz1[] = "To je";
char niz2[] = "niz";
char sestNiz[50];
int decst = 1;

sprintf(sestNiz, "Setstavim " %s " in " %s " v " %d, "niz", niz1, niz2, decst);
Serial.println(sestNiz);
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Sob Jan 30, 2016 9:01 am    Naslov sporočila:   Odgovori s citatom

chaos je napisal/a:

Konverzije se pa da delati tako:
Koda:

// iz char* v string
char* niz1 = "ABCD";
string niz2 = string(niz1);
// iz string v char*
string niz3 = "ABCD";
char* niz4 = niz3.c_str(); // ta pointer je veljaven samo dokler niz3 ni spremenjen!

LP!

Hvala! Konverzija iz char v string gre odlično.
Pri obratni konverziji pa
pri ukazu char* niz4 = niz3.c_str();
pa dobim invalid conversion from 'const char*' to 'char*' [-fpermissive]

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Sob Jan 30, 2016 9:16 am    Naslov sporočila:   Odgovori s citatom

Hvala vsem za pomoč,

Kar iščem, je da bi enkrat definiral bodisi string bodisi array of char in na isti vsebini delal manipulacijo tako z znaki, kot z orodji za manipulacijo s stringi.

V Bascomu (Bog mi odpusti!) je to easy:

definiram
Koda:
Const Maxlen = 48
Dim niz1 As String * Maxlen
Dim xniz1(maxlen) As Byte At niz1 Overlay

in na istih bajtih (at niz1 overlay) v procesorju sedita niz1, ki je string in xniz1 ki je array of characters.
In potem lahko delam z vsebino karkoli hočem.

Sem poizkusil v Arduinu z pointerji, toda tu pointer pridobi značilnosti variable, za katero je definiram. Tako v arduinu pointer+1 ne pomeni en bajt naprej, temveč en arrayelement naprej, se pravi en bajt, en word, en integer ali en string (veliko bajtov) naprej.
In ko sem v pointer, tipa char hotel dati naslov stringa, pravi neveljavna konverzija.

Tudi c arduina ni običajen C in recimo ne pozna printf ukaze, ne jamra, ampak jih ignorira.

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Sob Jan 30, 2016 9:33 am    Naslov sporočila:   Odgovori s citatom

Obstaja funkcija, bi naj bi naredila konverzijo iz stringa v bajte:

https://www.arduino.cc/en/Reference/StringGetBytes

Toda, kakorkoli kodiram, vedno mi najde neko napako, nikakor, da uspem predelati v niz.

Zakaj sem se zapičil v ta problem?
V C-u na Beagleboard-u, (ki je nekaj podobnega kot Malina-kolač) sem pred leti že sprogramiral funkcijo, ki preverja kontrolna dva znaka, pri NMEA telegramih. Gre za preprosto xor operacijo preko vseh znakov. Ta mi dela tudi na Arduinu, če je vsebina na razpolago v array fo char.
Ko pa sestavljam vsebino, ki jo želim poslati, mi prav pridejo stringconcatination ukazi, ki obstaajalo samo za spremenljivke tipa string.

Se pravi, da nujno rabim pretvorbo stringa v array of char.

_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Obelix
Član
Član



Pridružen-a: Pon 19 Maj 2008 13:59
Prispevkov: 1881
Aktiv.: 9.04
Kraj: Maribor

PrispevekObjavljeno: Sob Jan 30, 2016 9:58 am    Naslov sporočila:   Odgovori s citatom

Mogoče najdeš tukaj kaj uporabnega.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3361
Aktiv.: 14.18
Kraj: Dragomer

PrispevekObjavljeno: Sob Jan 30, 2016 10:02 am    Naslov sporočila:   Odgovori s citatom

Ne preostane mi drugo: treba bo štrikat for zanko in v njej uporabiti funkcijo charAt ( ta dela), ki mi da en bajt/znak iz stringa.
_________________
Nihče ni za vojno in vsi so za mir,
vsi so za bratstvo, nihče za prepir.
Od same ljubezni vsak čas na granatah
bo vtisnjeno geslo: "Darilo za brata"
Janez Menart
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
chaos
Član
Član



Pridružen-a: Sob 16 Sep 2006 22:12
Prispevkov: 1063
Aktiv.: 4.66
Kraj: Zagorje ob Savi

PrispevekObjavljeno: Pon Feb 01, 2016 1:29 pm    Naslov sporočila:   Odgovori s citatom

vilko je napisal/a:
chaos je napisal/a:

Konverzije se pa da delati tako:
Koda:

// iz char* v string
char* niz1 = "ABCD";
string niz2 = string(niz1);
// iz string v char*
string niz3 = "ABCD";
char* niz4 = niz3.c_str(); // ta pointer je veljaven samo dokler niz3 ni spremenjen!

LP!

Hvala! Konverzija iz char v string gre odlično.
Pri obratni konverziji pa
pri ukazu char* niz4 = niz3.c_str();
pa dobim invalid conversion from 'const char*' to 'char*' [-fpermissive]

Uporabi:
Koda:

const char* niz4 = niz3.c_str();

LP!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 495 dni


Powered by phpBB © 2001, 2005 phpBB Group