Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: Ongelma stringien käsittelyssä

Jupez83_ [05.12.2013 19:12:26]

#

Ongelmana on, että haluaisin stringeistä muuttaa halutut merkit hex-muotoon käyttämällä "\xAA" tyyppistä muotoilua. Onko muotoilussa olemassa jonkinlaista lopetesmerkkiä tai tapaa kertoa, mikä on luvun pituus? Sekava selostus, mutta jospa esimerkkikoodi valottaisi ongelmaa.

#define TEST_STRING  "\xAA12"

int main()
{
    printf("%s\n", TEST_STRING);
    return 0;
}

Eli tarkoitus olisi, että \xAA korvataan HEX-lukua vastaavalla merkillä ja 12 tulostetaan sellaisenaan. Kääntäjä siis olettaa että numerot 12 kuuluvat stringiin. Jos laitan välilyönnin "\xx 12" niin kaikki toimii (paitsi että tulee ylimääräinen välilyönti). Tiedän, että ongelma voitaisiin kiertää printf:n avulla, jos kyseessä olisi esimerkkiohjelma. Tämä ei kuitenkaan ole mahdollista, koska ongelma esiintyy erään ohjelman lokalisointitiedostoissa, josta olisi tarkoitus muuttaa erikoismerkit HEX-muotoon. Olisiko, jollain C-gurulla tietoa, miten erikoismerkkien koodaus tulisi hoitaa? Kiitokset vastanneille jo etukäteen!

Mod. lisäsi kooditagit!

jlaire [05.12.2013 21:24:01]

#

Jännä miten C:stä oppii aina uutta. :o Standardin mukaan \x tosiaan syö kaikki sen jälkeen tulevat heksadesimaalinumerot.

Yksi ratkaisu olisi kirjoittaa "\xAA" "12", mutta tämä näyttää vähän hassulta eikä välttämättä tule kyseeseen lokalisointitiedostossa.

Voit käyttää \u-muotoilua, jolle annetaan aina tasan 4 numeroa: "\u00AA12".

Metabolix [05.12.2013 22:33:40]

#

Toinen hassu ratkaisu on kirjoittaa myös seuraavat merkit \x-muodossa, kunnes heksadesimaalit loppuvat. Kolmas vaihtoehto on käyttää oktaalimuotoa \252, joka ottaa vain kolme numeroa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta