Forum » Programiranje » Pomoč pri nalogi za faks (pretvarjanje UTF8 to Unicode)
Pomoč pri nalogi za faks (pretvarjanje UTF8 to Unicode)
lzgowie ::
Zdravo, na faksu smo dobili nalogo, kjer moramo pretvoriti simbol zapisan v kodiranju utf8 v unicode. Vse to, moramo narediti z logičnimi operatorji in bit shiftom. Nalogo moramo narediti v programskem jeziku C, če bi mi znal kdo pomagat v kakšnem drugem programskem jeziku, bom že prevedel :)
Torej znak vnesemo v hex, ga pretvorimo iz izpišemo v hex
Če vpišemo znak za eno osmino v UTF8 (⅛) e2859b, moramo nazaj dobiti hex 215B
Tole je znak: https://www.fileformat.info/info/unicod...
Dobili smo še spodnjo tabelo za pomoč
Če mi kdo uspe rešiti problem, mu dam za sixpack piva na PayPal :)
Torej znak vnesemo v hex, ga pretvorimo iz izpišemo v hex
Če vpišemo znak za eno osmino v UTF8 (⅛) e2859b, moramo nazaj dobiti hex 215B
Tole je znak: https://www.fileformat.info/info/unicod...
Dobili smo še spodnjo tabelo za pomoč
Unicode Bin zapis za transofrmacijo Od X'00 do X'7F 0xxx xxxx Od X'80 do X'7FF 110x xxxx 10xx xxxx Od X'800 do X'FFFF 1110 xxxx 10xx xxxx 10xx xxxx
Če mi kdo uspe rešiti problem, mu dam za sixpack piva na PayPal :)
- spremenilo: lzgowie ()
AndrejO ::
Koda na stackoverflow je potencialno kul, ampak bom povzel enega izmed komentarjev.
Termin "Unicode" je preobremenjen in pomeni vse sorte. Zato je bolj pravilno reči v katero obliko zapisa se pretvarja, ker je tudi UTF-8 dejansko "Unicode" zapis bi lahko samo vhod kopiral v izhod in utemeljno trdil, da je tvoje delo opravljeno.
Kdor postavlja takšne dvoumne naloge, si zasluži nekaj konstruktivne kritike. Iz besedila namreč ni razvidno, če naloga zahteva Unicode codepoint (navzgor neomejeno celo število), UTF-16 (do nekaj let nazaj narobe smatrano kot "Unicode", ker seznam vseh znakov še ni presegel števila 65533) ali pa UTF-32 (trenutno narobe smatrano kot "Unicode", ker seznam vseh znakov še ni presegel števila 2^32-2). Kot študent bi zahteval, da se besedilo naloge razjasni oziroma, da se natančno definira, če naloga zahteva Unicode codepoint ali katerega izmed alternativnih UTF/UCS zapisov namesto UTF-8.
Termin "Unicode" je preobremenjen in pomeni vse sorte. Zato je bolj pravilno reči v katero obliko zapisa se pretvarja, ker je tudi UTF-8 dejansko "Unicode" zapis bi lahko samo vhod kopiral v izhod in utemeljno trdil, da je tvoje delo opravljeno.
Kdor postavlja takšne dvoumne naloge, si zasluži nekaj konstruktivne kritike. Iz besedila namreč ni razvidno, če naloga zahteva Unicode codepoint (navzgor neomejeno celo število), UTF-16 (do nekaj let nazaj narobe smatrano kot "Unicode", ker seznam vseh znakov še ni presegel števila 65533) ali pa UTF-32 (trenutno narobe smatrano kot "Unicode", ker seznam vseh znakov še ni presegel števila 2^32-2). Kot študent bi zahteval, da se besedilo naloge razjasni oziroma, da se natančno definira, če naloga zahteva Unicode codepoint ali katerega izmed alternativnih UTF/UCS zapisov namesto UTF-8.
28.3 čl. Pravil: Argumentirano pritožbo mora uporabnik poslati v oddelek
Slo-Tech, tema Pritožbe. Pritožb poslanih po zasebnih sporočilih,
elektronski pošti ali odprte v obliki tem v drugih oddelkih se ne upošteva.
Slo-Tech, tema Pritožbe. Pritožb poslanih po zasebnih sporočilih,
elektronski pošti ali odprte v obliki tem v drugih oddelkih se ne upošteva.
Randomness ::
Koda na stackoverflow je potencialno kulMogoče je, ampak gre v smeri unicode -> utf8 in ne obratno, kot želi OP.
Vse to, moramo narediti z logičnimi operatorji in bit shiftomTole je precej nerazumljivo zapisano. Grem stavit, da je navodilo naloge bolj jasno. V nasprotnem svetuj asistentu, da se naj nauči bolj natančno izražati ;-)
lzgowie ::
To je psevdokoda oz nekaj, s čimer nam je bila naloga razložena:
https://imgur.com/a/9Y5A6v6
Glede bit shiftinga sem pa mislil tole: Bit banging @ Wikipedia
https://imgur.com/a/9Y5A6v6
Glede bit shiftinga sem pa mislil tole: Bit banging @ Wikipedia
Zgodovina sprememb…
- spremenilo: lzgowie ()
rokp ::
Ce nisem kje zafrknil, je nekako takole. Malo si pretvori v binarno, pa vse pisi kot 24 bitov (no, lahko tudi kot 32, ampak bo prvih osem bitov itak vedno 0), pa ti bo hitreje jasno. Pisal sem z oklepaji, da je vrstni red operacij nedvoumen.
if (X & 0xffff80 == 0) X elseif (X & 0xffe0c0 == 0x00c080) ((X & 0x001f00) >> 2) | (X & 0x00003f) elseif (X & 0xf0c0c0 == 0xe08080) ((((X & 0x0f0000) >> 2) | (X & 0x003f00)) >> 2) | (X & 0x00003f) else neveljaven input
Randomness ::
Z mojim komentarjem sem predvsem ciljal na to, da ni razvidno, ali je (poleg samoumevnih bitnih operacij) dovoljeno uporabiti vejitve (if stavke). Ker načeloma se da stvar narediti tudi brez njih.
DamijanD ::
Randomness je izjavil:
Koda na stackoverflow je potencialno kulMogoče je, ampak gre v smeri unicode -> utf8 in ne obratno, kot želi OP.
Ti pa nisi pogledal cele kode, a? Tvoj komentar je dejansko enak kot eden izmed prvih komentarjev na SOju
Randomness ::
Ti pa nisi pogledal cele kode, a?Ja, res je. Sem spregledal, da sta dve funkciji. Je pa koda za moj okus sicer precej neelegantna.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [UWP] [C#]Oddelek: Programiranje | 4184 (2214) | BivšiUser2 |
» | [php] encoding nizaOddelek: Izdelava spletišč | 3791 (1706) | BivšiUser2 |
» | Unicode 8.0.0 prinaša več kot sedem tisoč novih znakovOddelek: Novice / Ostala programska oprema | 35455 (29934) | johnnyyy |
» | [C++] Slovenski znaki v Command PromptuOddelek: Programiranje | 3328 (3032) | Makronaut |
» | [C++] Unicode, Utf...Oddelek: Programiranje | 1503 (1386) | Matako |