IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
kxmx
Tvůrce
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
Tvůrce
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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
19.7.2016 0:19
Avatar
kxmx
Tvůrce
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.