Stránka 1 z 1
Převod uint64 to byte[]
Napsal: 05 úno 2018, 23:03
od Dokola
Hledám způsob jak převést číslo ve formátu uint64 např. 0xffffffe7e7ffffff na pole
byte zdrojPic [] = { B11111111, B11111111, B11111111,......
Matematicky to umím, ale v Arduinu teprve tápu a tak to dělám asi strašně složitě a zamotávám se do toho.
Nasměruje mne někdo prosím správným směrem?
Re: Převod uint64 to byte[]
Napsal: 06 úno 2018, 06:40
od pavel1tu
Ve specifikaci jsem nenašel že by to přímo "jazyk" uměl.
Asi přes pole ?
char mujarray[8][15]=
{
"00000000",
"00000001",
"00000010",
"00000011"
atd..
};
pochopil ?
pak vyhledáš znak a nahradíš ho částí z řetězce
Re: Převod uint64 to byte[]
Napsal: 06 úno 2018, 06:49
od petan
Nešlo by to takto? (nezkoušel jsem)
Kód: Vybrat vše
for (byte i=7; i>=0; i--){
zdrojPic[i] = puvodniCislo;
puvodniCislo >>= 8;
}
Re: Převod uint64 to byte[]
Napsal: 06 úno 2018, 08:23
od zbysek
Pokud je cílem získat jednotlivé byty z čísla typu uint64, mohlo by fungovat něco takového:
Kód: Vybrat vše
uint64_t x = 0xffffffe7e7ffffff;
for(int i = 0; i < 8; i++) {
byte b = ((uint8_t *)&x)[i]); //byte na poloze i
// ...
}
((uint8_t *)&x)
)
funguje tak, že vezme adresu proměnné x: (&x)
máme tedy ukazatel někam do paměti. Ten dále přetypujeme na ukazatel na byte/uint8_t: ((uint8_t *)&x)
proměnná datového typu pole se chová podobně, jako ukazatel a naopak, můžeme tedy přistupovat k jednotlivým prvkům pomocí indexu: ((uint8_t *)&x)
Záleží co potřebujete s jednotlivými byty dělat.
Pokud chcete získat hodnoty binárně, můžete si je posílat po sériové lince:
petanovo řešení by také mohlo fungovat
Re: Převod uint64 to byte[]
Napsal: 06 úno 2018, 15:28
od pavel1tu
zbysek píše: ↑06 úno 2018, 08:23
Pokud je cílem získat jednotlivé byty z čísla typu uint64, mohlo by fungovat něco takového:
Kód: Vybrat vše
uint64_t x = 0xffffffe7e7ffffff;
for(int i = 0; i < 8; i++) {
byte b = ((uint8_t *)&x)[i]); //byte na poloze i
// ...
}
((uint8_t *)&x)
)
funguje tak, že vezme adresu proměnné x: (&x)
máme tedy ukazatel někam do paměti. Ten dále přetypujeme na ukazatel na byte/uint8_t: ((uint8_t *)&x)
proměnná datového typu pole se chová podobně, jako ukazatel a naopak, můžeme tedy přistupovat k jednotlivým prvkům pomocí indexu: ((uint8_t *)&x)
Záleží co potřebujete s jednotlivými byty dělat.
Pokud chcete získat hodnoty binárně, můžete si je posílat po sériové lince:
petanovo řešení by také mohlo fungovat
To je SUPER, hned to jdu vyzkoušet .... i když nevím zda to někdy bude potřeba.