dodání ihned! nové
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
BF
Avatar
kxmx
Redaktor
Avatar
kxmx:18.7.2016 15:23

Ahoj, modbusová funkce mi vrací číslo typu int64, to potřebuji předat na druhou sériovou linku v hex tvaru, bohužel třída String neumí int64 převést na hex

int64_t val = 9223372036854775807;
String result = String(val, HEX);

//

call of overloaded 'String(int64_t&, int)' is ambiguous

Co s tím? Naprogramovat si převod dec to hex po svém?

 
Odpovědět
18.7.2016 15:23
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na kxmx
ostrozan:19.7.2016 0:19

pokud chceš jenom data přeposlat dál jako 8 bajtů po sériovce, tak si to budeš muset rozdělit na 2x int32_t

int64_t val = 9223372036854775807;
int32_t tmp = val;
Serial.write(tmp);
tmp = val >> 32;
Serial.write(tmp);

pokud ale chceš poslat "textovou" podobu - tady konkrétně "‭7FFFFFFFFFF­FFFFF‬" což mi sice není jasné proč, ale postup by byl podobný

int64_t val = 9223372036854775807;
int32_t  tmp = val;
String result = String(tmp, HEX);
tmp = val>>32;
result  += String(tmp, HEX);

arduino bohužel ve svých metodách nepracuje s větším typem, než int32_t(long) - leda že by sis metodu do třídy Serial, nebo String dopsal :-)

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
19.7.2016 0:19
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
kxmx
Redaktor
Avatar
kxmx:19.7.2016 10:36

Díky, přesně to jsem potřeboval. Na druhé sériové lince mám totiž modem, který do AT příkazu pro odeslání dat přijímá sekvenci bajtů v hex tvaru.

 
Nahoru Odpovědět
19.7.2016 10:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.