HEX arvoilla kikkailu?

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?
6729
Äänestä

Muut lukivat myös

Vastaukset 6

Vanhimmat

HEX -arvo tulee lähettää sitten vielä sarjaporttia pitkin eteenpäin.

Äänestä

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.

Äänestä
  • Ei kannata käyttää char-tyyppiä, sen arvo vaihtelee välillä -127 -> 127. Käytä mieluumin unsigned char:ia.

    Äänestä

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.

Äänestä
  • 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?

    Äänestä

  • Kalle__ kirjoitti:

    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.

    Äänestä

Kommentoi aloitusta


Kalle__ kirjoitti:

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?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu