Hodnoty (text/string), spojeni – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Hodnoty (text/string), spojeni – C / C++ – Fórum – Programujte.comHodnoty (text/string), spojeni – C / C++ – Fórum – Programujte.com

 

Alojz80
~ Anonymní uživatel
3 příspěvky
27. 3. 2017   #1
-
0
-

Ahoj,

hraju si s arduinem a narazil jsem na problem, jelikoz nejsem v c++ zbehly a znalosti z c# mi nepomahaji prosim o pomoc,

mam ciselne hodnoty temp1 a temp2

a potrebuju je dostat do hodnoty http requestu a praje u teto banality jsem narazil na problem, tedy:

request.path = ("/?temp1=" "&temp2=");    // me funguje

v momente kdyz dosadim hodnoty:

request.path = ("/?temp1=" dll.gettemp1() "&temp2=" dll.gettemp2());

nejde aplikace zkompilovat,

request.path = ("/?temp1=" dll.gettemp1() "&temp2=" dll.gettemp2());

nejde mi ani "tradicni":

request.path = ("/?temp1=" + dll.gettemp1() + "&temp2=" + dll.gettemp2());

prosim tedy o radu, jak tohle v c++ zapisu,

dekuju moc

Lojza

Nahlásit jako SPAM
IP: 82.144.139.–
27. 3. 2017   #2
-
0
-

Jakého datového typu je request.path? Záleží na tom, zda máš char* nebo std::string (asi méně pravděpodobné). V případě char* bych asi použil sprintf, pokud by to množství dostupné paměti neumožnilo, napsal bych si svůj ekvivalent, který zkonvertuje čísla na char* a složí celý char* řetězec. V případě std::string existuje metoda to_string(číslo), ale až od C++11. Co se týče uvozovek v řetězcových konstantách, je potřeba použít escape sekvenci.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
27. 3. 2017   #3
-
0
-

   

char text[256];
float num = 1.879;

sprintf(text, "mezi uvozovkami je cislo \"%f\"", num);

výsledek by měl být mezi uvozovkami je cislo "1.879"

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Alojz80
~ Anonymní uživatel
3 příspěvky
27. 3. 2017   #4
-
0
-

#2 hlucheucho
ahoj, tak datovy typ je:

String path;

ale ani na zaklade tve predchozi rady se nemuzu dopatrat cile, prosim jeste o radu.

Lojza

Nahlásit jako SPAM
IP: 82.144.139.–
KIIV
~ Moderátor
+43
God of flame
27. 3. 2017   #5
-
0
-

Arduino String class umi prevadet typy, ale je to taky velice zrave na pamet.

Problem s tvoji "tradicni" variantou je v tom, ze typy pro "/?temp1=" + dll.gettemp1() jsou const char * a pravdepodobne float nebo int. Takze prekladac opravdu netusi, ze se to casem prevede do Stringu.

Aby to fungovalo, musis pouzit napriklad:

request.path = String{"/?temp1="} + dll.gettemp1() + "&temp2=" + dll.gettemp2();


Nicmene je potreba si uvedomit, ze: 
String{"/?temp1="}   // vytvori prvni retezec

K nemu se pak pripoji cislo 
dll.gettemp1()          // to je druhy retezec

A takto to pokracuje az k do prirazeni. Vse to pouziva dynamickou alokaci, a vede to k uplne silene fragmentaci pameti, ktere nemas zrovna moc k dispozici.

Prinejmensim je alespon dobry napad rezervovat velikost te path dopredu, aby se pak nerealokovala.
 

Jo a spojovani retezcu bez operatoru - ve stylu  "retezec 1" "retezec 2"  funguje jen pro retezcove konstanty. (legacy zalezitost z C preprocessoru)

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Alojz80
~ Anonymní uživatel
3 příspěvky
27. 3. 2017   #6
-
0
-

#5 KIIV
dekuju moc za pomoc, uz mi funguje, co jsem potreboval,

je moznost nastavit velikost tomu "arduino stringu"? nebo je to treba resit jinym datovym typem?

Nahlásit jako SPAM
IP: 82.144.139.–
KIIV
~ Moderátor
+43
God of flame
28. 3. 2017   #7
-
0
-

#6 Alojz80
https://www.arduino.cc/…tringReserve

Nicmene, pak by bylo lepsi pouzit toto (udela se rezervace mista a nevytvareji se dalsi docasne stringy):

request.path.reserve(40);

request.path = F("/?temp1="); // usetri se trochu pameti, pokud konstanty zustanou jen v programove pameti pomoci makra F()

request.path += dll.gettemp1();
request.path += F("&temp2=");
request.path += dll.gettemp2();

Ale kazdopadne je nekdy lepsi pouzit to sprintf (nebo radeji snprintf)

Nahlásit jako SPAM
IP: 94.113.99.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 68 hostů

Podobná vlákna

Spojení string — založil vollf82

String to hex ebo Byte()"string" — založil Roman Uherek

Spojení se serverem — založil Kenvelo

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý