Base64 kodeeringu raamatukogu koos Arduinoga

Base64 kodeeringu raamatukogu koos Arduinoga

Base64 kodeeringu raamatukogu koos Arduinoga

Alus64 on kodeerimissüsteem, mis kasutab 64 sümbolit, mis on rühmitatud sõnumiteks, mille pikkus on neli kordaja. Neid sõnumeid (andmepakette) täiendatakse vajadusel plussmärgiga (seetõttu kasutatakse 65), sageli võrdusmärki (=), kui kodeeritud kasuliku teabe tulemuseks on lühem pikkus.

Sisukord

    Kasutades 64 märki, saate töötada koodi 10 numbri ning suur- ja väiketähtedega (26+26) ASCII, probleem on selles, et seal on 62, ütleme, üheselt mõistetavat sümbolit pluss kaks, mis erinevad erinevates rakendustes. Kuigi mõnikord viidatakse sellele väljendiga "tegelased ASCII prinditav", tegelikkuses on need need, mis ulatuvad koodiga 32 (tühik) tähistatud koodist 126 (~) tõeliselt prinditava 95-ni.

    Kodeerimise rakendamine Alus64 enim kasutatud, et PEM, mida kasutab ka MIME, kasutage lisamärke "+" ja "/" ning märki "=", et pakettide pikkus oleks neljakordne. Tähed A–Z asuvad positsioonidel 0–25, tähed a–z asuvad positsioonidel 26–51, numbrid 0–9 on positsioonidel 52–61, plussmärk (+) on positsioonidel 62 ja positsiooni 63 hõivab kaldkriips (/ ).

    Andmete esitamise viis vormingus Alus64 koosneb algandmetest rühmade võtmisest 6 bitti mis on esindatud vastava koodiga. Kui bitte jääb üle, täidetakse need paremale nullidega. Kui saadud koodide arv ei ole neljakordne, täidetakse see paremal asuvate võrdusmärkidega.

    Järgmine pilt näitab kodeerimist ASCII tekstist ("ohm") ja viisist, kuidas see teisendatakse Alus64. Kuna sümboleid on 7, tuleks viimane teade lõpus täita võrdusmärgiga. Võiks öelda, et tekst "ohm" sisse ASCII samaväärne "b2htaW8=" in Alus64.

    Base64 kodeeringu näide

    Kodeerimise spetsiifilised kasutusalad Alus64 Tavaliselt kehtestavad nad ka maksimaalse joone pikkuse. Rakendamine MIME Iga rea ​​pikkus on 76 tähemärki. Tavaliselt eraldatakse read realõpu koodiga (CR, mida tähistab väärtus 0x0D ASCII) ja veel üks uus rida (NL, mis vastab koodile ASCII 0x0A).

    Ebamugavused, mis kodeerimise rakendamisel lisanduvad Alus64 väheste ressurssidega seadmel, nagu sageli a puhul mikrokontroller on see, et peate kodeerima teabe saabumisel või a-ga puhver miinimum, mis eeldab ka süsteemi tagamist, mis annab märku, et algse sõnumi lõpp on saavutatud, lisades näiteks spetsiaalse koodi või kasutades PIN-koodi, mille tase (vastuvõtuga sünkroniseerituna) näitab sõnumi olekut.

    Allolev näitekood on a teek Arduino jaoks Base64-s kodeerimiseks mida rakendatakse mõlema kriteeriumiga: saabuva teabe kodeerimine (ilma a puhver) ja oodake hoiatussignaali lõppu.

    Koodi arvutamise põhiosa Alus64 Seda tehakse väljendiga:
    (valor_original>>(2+(numero_valor%3)*2))|resto_base64
    ja jäägi arvutamine avaldisega:
    (valor_original&(MASCARA_B64>>desplazamiento))<<desplazamiento,
    olemine desplazamiento väärtus, mis arvutatakse avaldisega:
    4-(numero_valor%3)*2

    Nende avaldiste saamiseks järgnev protsess seisneb kõigi nelja koodi arvutamise üldistamises Alus64 mis tulenevad algväärtuse kolme baidi esitamisest.

    Base64=((byte_1>>2)|resto)&0b00111111 resto=(byte_1&0b00000011)<<4
    Base64=((byte_2>>4)|resto)&0b00111111 resto=(byte_2&0b00001111)<<2
    Base64=((byte_3>>6)|resto)&0b00111111 resto=(byte_3&0b00111111)<<0
    Base64=((byte_3>>0)|resto)&0b00111111 resto=(byte_3&0b00111111)<<0

    Koos tekstiga Base64 Ülaltoodud pseudokood viitab sissetulevale koodile Alus64 mida arvutatakse. Väljendit on kasutatud byte_n viidata kodeeritavale n-ndale baidile. Tekst resto tähistab kodeeritava baidi järelejäänud bitte. Arvutamise alguses eeldatakse, et jääk on null

    Selguse huvides on eelmises pseudokoodis 6-bitine mask kaasatud kõigi koodide arvutamisse, kuigi on vaja määrata ainult viimane neist, kuna teised on pööratud nii, et kaks kõige rohkem bitti lähevad alati kaotsi. märkimisväärne.

    Nagu näha, on neljas kood kõik jääk ja pärast pole vaja jääki arvutada; Seetõttu on vaja teha ainult kolm sammu, üks kodeeritud baidi kohta. Oluline on meeles pidada, et kui paketi kolmas bait ei oleks kodeeritud, tuleks viimane kood paremal pool täita nullidega. Alus64 saadud.

    Üldistamiseks avaldise õige pööramine, mis arvutab sisse koodi Alus64 saab kujutada kui 2+(numero_byte%3)*2 nii, et sulgudes olev osa pöörleks nullist kaheni, mille tulemuseks on 2, 4 ja 6 igal sammul. Muidugi pole see ainus viis üldistamiseks, kuid valisin selle funktsionaalsuse ja eelkõige selguse huvides. Kuna mask (AND) oli vajalik ainult neljandas koodis ja on juba nähtud, et seda pole vaja arvutada (see on kõik jääk), siis ei lisata seda lõppavaldisesse selle lihtsustamiseks, kuigi me peame meeles pidama et kasutatavate andmete tüüp (bait ) võetakse ainult 6 vähima tähtsusega bitti.

    Ülejäänute vasakpoolset pöörlemist saab üldistada analoogselt eelnevaga. Samuti on näha, et rakendatud mask (AND) läbib sama bitipöörde, kuid vastupidises suunas. See on põhjus nihke arvutamiseks 4-(numero_valor%3)*2 enne selle rakendamist igale väljendi osale vastavas tähenduses.

    Järgmine näide näitab, kuidas kasutada teeki tekstistringi kodeerimiseks (pidage meeles, et Alus64 saab kasutada mis tahes andmekogumi jaoks, näiteks pildi jaoks). Järgmises koodis on paar detaili, mida on huvitav selgitada. Esiteks on teksti lõpu tähistamiseks kasutatud spetsiaalset sümbolit (sümbolit ~), mitte riistvarasignaali või teksti pikkust näitavat. Loogiliselt võttes ei saa see sümbol olla osa kodeeritud andmetest.

    Teine küsimus, mida tuleb käsitleda, nii oluline kui see on ilmselge, on see, et sihtkoha dekooder peab teadma, kuidas temani jõudvat teavet esitatakse. Tekst sisaldab märke, mis komplekti ei kuulu ASCII prinditav (32-126), näiteks aktsendiga tähed. Arduino kasutab kahte baiti (UTF-8) nende märkide tähistamiseks. Tavalist ei saa lihtsalt kasutada \0 teksti terminaatorina, kuna paljudel juhtudel on esimene bait, millega märki esitatakse, täpselt null.

    Eelmise näite rida 26 näitab, kuidas kasutada teek Arduino jaoks Base64-s kodeerimiseks. On vaja ainult näidata meetod convertir iga bait mida soovite kodeerida ja valikuliselt kas see on viimane või kui ei, siis peatage teisendamine meetodiga terminar kui jõuad lõppu.

    Nagu on näha alloleval ekraanipildil, on näidisprogramm teek Arduino jaoks Base64-s kodeerimiseks kuvab esmalt teksti, millesse kodeeritakse Alus64, antud juhul hiiglaste kuulsa laulu algus Les Luthiersja seejärel sisse kodeerimise tulemus Alus64 kasutades vormingu rea pikkust MIME.

    Base64 kodeering Arduinoga. Teksti teisendamise väljundi näide

    Postita kommentaar

    Võib-olla jäite vahele