» »

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č
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 ()

sbawe64 ::

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.
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.

Randomness ::

Koda na stackoverflow je potencialno kul
Mogoče je, ampak gre v smeri unicode -> utf8 in ne obratno, kot želi OP.

Vse to, moramo narediti z logičnimi operatorji in bit shiftom
Tole 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

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.

rokp ::

Jaz sem domneval, da se sme, ker so bili tudi pri razlagi uporabljeni if stavki...

DamijanD ::

Randomness je izjavil:

Koda na stackoverflow je potencialno kul
Mogoč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 :D

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[UWP] [C#]

Oddelek: Programiranje
423957 (1987) BivšiUser2
»

[php] encoding niza

Oddelek: Izdelava spletišč
173635 (1550) BivšiUser2
»

Unicode 8.0.0 prinaša več kot sedem tisoč novih znakov

Oddelek: Novice / Ostala programska oprema
3834200 (28679) johnnyyy
»

[C++] Slovenski znaki v Command Promptu

Oddelek: Programiranje
133217 (2921) Makronaut
»

[C++] Unicode, Utf...

Oddelek: Programiranje
61416 (1299) Matako

Več podobnih tem