Minun pitäisi vertailla HEX-arvoja välillä 0x80-0xFF. Millaiseen muuttujatyyppiin HEX -arvo tulee tallentaa ja kuinka niitä vertaillaan? Onko käytettävä tyyppi char, vai mikä?
Eli näin tulisi tehdä:
while(;;) {
muuttujan arvo = 0x80;
Tee jotain muuta;
muuttuja = 0x81;
(Jos muuttuja >= 0xFF) {
muuttuja = 0x80;
}
}
Toivottavasti ymmärsitte, mitä tarkoitin?
Eli näin tulisi tehdä:
while(;;) {
muuttujan arvo = 0x80;
Tee jotain muuta;
muuttuja = 0x81;
(Jos muuttuja >= 0xFF) {
muuttuja = 0x80;
}
}
Toivottavasti ymmärsitte, mitä tarkoitin?
Vastaukset 6
Vanhimmat
HEX -arvo tulee lähettää sitten vielä sarjaporttia pitkin eteenpäin.
hexa-arvot väliltä 0x00 - 0xFF mahtuu juuri tuohon charriin. jos arvo menee yli 0xFF käsittääksen charrin arvo pyörähtää takaisin nollaan eli alkuun. tai sitten olen käsittänyt väärin.
Ei kannata käyttää char-tyyppiä, sen arvo vaihtelee välillä -127 -> 127. Käytä mieluumin unsigned char:ia.
Tietotyyppien ominaisuuksiin voi tutustua limits-nimisen otsikkotiedoston avulla. En löytänyt hyvää selitystä linjalta, joten kääntäjäsi dokumentaatio voi olla parempi idea, tai sitten jokin C -kirja.
Unsigned char varmaankin voi pitää nuo arvot sisällään. Helpostihan testaat sitä. Int voi olla myös hyvä tyyppi, vaikka siinä menee usea tavu hukkaan. Jos noita HEX-arvoja ei nimittäin ole paljon, ei se haittaa, että 3/4 tms. on höttöä.
0x-alku on vain tapa esittää heksaluku kääntäjän ymmärtämässä muodossa. Niillä lasketaan aivan kuten millä tahansa kokonaislukutyypillä, jota ne ovat.
Ideana on lähettää Hex -arvo sarjaporttiin, jossa matkapuhelin lukee hex-arvon, joka vaihtelee välillä 0x80-0xFF.
Sarjakaapeliin lähetetään STRING -tyyppinen muuttuja:
unsigned char merkki = 0x80;
std::string query;
query.append(merkki);
tuo ei toimi. Kuinka lisään char:n stringiin?
Haluatko lähettää sinne sarjakaapeliin string-muuttujan ihan oikeasti? Miten keskustelet sinne kaapeliin päin? Jollain rajapinnalla?
Tee ainakin ensin ero noiden muuttujatyyppien välillä. Jos laitat char:iin arvon 0x80, niin laitat sinne itseasiassa numeerisen arvon, joka sitten tulkataan alustakohtaisesti (vai koodausjärjestelmästä riippuen) miten tulkataan. Eli jos haluat stringin, jossa on merkkijono "0x80", niin se ei onnistu laittamalla char:n arvoksi 0x80 ja lykkäämällä se stringin persuksiin, vaan sinun pitää laittaa stringiin merkkijono "0x80". Esim. char-merkki "0" (nolla) vastaa (ASCII:ssa) char-muuttujan numeerista arvoa 48, joka on hexana 0x30. Siis "char c = 0x30" laittaa c:hen merkin nolla "0" ja appendilla tuo nolla menee stringin takamukseen.
Lue käyttämäsi kirjaston spekseistä mitä sinne pitää tuupata ja missä formaatissa ja miten.