Převod uint64 to byte[]
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Převod uint64 to byte[]
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?
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[]
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
Asi přes pole ?
char mujarray[8][15]=
{
"00000000",
"00000001",
"00000010",
"00000011"
atd..
};
pochopil ?
pak vyhledáš znak a nahradíš ho částí z řetězce
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Re: Převod uint64 to byte[]
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[]
Pokud je cílem získat jednotlivé byty z čísla typu uint64, mohlo by fungovat něco takového:
((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
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
// ...
}
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:
Kód: Vybrat vše
Serial.print(b, BIN)
Re: Převod uint64 to byte[]
To je SUPER, hned to jdu vyzkoušet .... i když nevím zda to někdy bude potřeba.zbysek píše: ↑06 úno 2018, 08:23Pokud je cílem získat jednotlivé byty z čísla typu uint64, mohlo by fungovat něco takového:
((uint8_t *)&x))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 // ... }
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 fungovatKód: Vybrat vše
Serial.print(b, BIN)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Pavel1TU
"Správně napsaný kod lze číst jako knihu"
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 7 hostů