Base64 kódoló könyvtár Arduino-val

Base64 kódoló könyvtár Arduino-val

Base64 kódoló könyvtár Arduino-val

Bázis64 egy olyan kódrendszer, amely 64 szimbólumot használ üzenetekbe csoportosítva, amelyek hossza négyes többszöröse. Ezeket az üzeneteket (adatcsomagokat) szükség esetén pluszjellel (tehát 65-öt használunk), gyakran egyenlőségjellel (=) egészítjük ki, ha a kódolt hasznos információ rövidebb hosszúságot eredményez.

Tartalomjegyzék

    64 jellel dolgozhat a kód 10 számával és kis- és nagybetűivel (26+26) ASCII, az a probléma, hogy van 62, mondjuk, egyértelmű szimbólum plusz kettő, amelyek a különböző megvalósításokban változnak. Bár néha a „karakterek” kifejezéssel hivatkoznak rájuk ASCII nyomtatható", a valóságban ezek azok, amelyek a 32-es kódtól (szóköz) a 126-ig (~) a valóban nyomtatható 95-ig terjednek.

    A kódolás megvalósítása Bázis64 leggyakrabban használt, hogy a PEM, amelyet szintén használ PANTOMIM, dolgozzon a plusz "+" és "/" jelekkel, valamint az "=" jellel a padokhoz, hogy a csomagok hossza négyes többszöröse legyen. Az A-Z betűk 0-25, az a-z betűk a 26-51, a 0-9 számok az 52-61, a pluszjel (+) a 62, a 63 pedig a perjel (/ ) foglalja el.

    Az adatok formátumban történő megjelenítésének módja Bázis64 abból áll, hogy az eredeti adatokból csoportokat veszünk 6 bit amelyeket a megfelelő kóddal ábrázolunk. Ha bitek maradnak, jobbra nullákkal töltik fel. Ha a kapott kódszám nem négyszerese, akkor egyenlőségjelekkel töltjük ki jobbra.

    A következő képen a kódolás látható ASCII szöveg ("ohm") és a konvertálás módja Bázis64. Mivel 7 szimbólum van, az utolsó üzenetet egyenlőségjellel kell kitölteni a végén. Azt lehetne mondani, hogy az "ohm" szöveg be ASCII egyenértékű a «b2htaW8=" in Bázis64.

    Base64 kódolási példa

    A kódolás speciális felhasználási módjai Bázis64 Általában megszabnak egy maximális vonalhosszt is. Az implementáció PANTOMIM Az egyes sorokat 76 karakterre korlátozza. Általában a sorokat egy sorvégi kód választja el (CR, amelyet a 0x0D érték képvisel ASCII) és egy másik új sor (NL, amely megfelel a kódnak ASCII 0x0A).

    A kódolás végrehajtása során felmerülő kényelmetlenség Bázis64 kevés erőforrással rendelkező eszközön, ahogy az gyakran előfordul a mikrovezérlő az, hogy kódolnia kell az információ beérkezésekor vagy a ütköző minimum, amihez szükség van egy olyan rendszer biztosítására is, amely jelzi, hogy az eredeti üzenet végét elérték, például egy speciális kód hozzáadásával, vagy olyan PIN-kód használatával, amelynek szintje (a vétellel szinkronizálva) jelzi az üzenet állapotát.

    Az alábbi példakód a könyvtár az Arduino számára a Base64 kódolásához amely mindkét feltétellel valósul meg: a beérkező információ kódolása (a nélkül ütköző), és várja meg a figyelmeztető jelzés befejezését.

    A kódszámítás alapvető része Bázis64 Ez a következő kifejezéssel történik:
    (valor_original>>(2+(numero_valor%3)*2))|resto_base64
    és a maradék kiszámítása a következő kifejezéssel:
    (valor_original&(MASCARA_B64>>desplazamiento))<<desplazamiento,
    lét desplazamiento a következő kifejezéssel kiszámított érték:
    4-(numero_valor%3)*2

    A kifejezések megszerzéséhez követett eljárás a négy kód mindegyikének kiszámításának általánosításából áll Bázis64 amelyek az eredeti érték három bájtjának megjelenítéséből származnak.

    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

    A szöveggel Base64 A fenti pszeudokód a bemeneti kódra vonatkozik Bázis64 ami számítás alatt van. A kifejezést használták byte_n a kódolt n-edik bájtra utalni. A szöveg resto a kódolt bájt maradék bitjeit jelöli. A számítás elején feltételezzük, hogy a maradék nulla

    Az áttekinthetőség kedvéért az előző pszeudokódban a 6 bites maszk minden kód számításába bekerült, bár ezek közül csak az utolsót kell meghatározni, mivel a többi úgy van elforgatva, hogy mindig a két legtöbb bit elveszik. jelentős.

    Mint látható, a negyedik kód csak maradék, és nincs szükség a maradék kiszámítására. Ezért csak három lépést kell végrehajtani, kódolt bájtonként egyet. Fontos megjegyezni, hogy ha egy csomag harmadik bájtja nincs kódolva, akkor az utolsó kódot nullákkal kell kitölteni a jobb oldalon. Bázis64 kapott.

    Általánosságban a kódot kiszámító kifejezés megfelelő elforgatása Bázis64 ként ábrázolható 2+(numero_byte%3)*2 hogy a zárójelben lévő rész nulláról kettőre forogjon, így minden lépésben 2, 4 és 6 lesz. Természetesen nem ez az egyetlen módja az általánosításnak, de a funkcionalitás és mindenekelőtt az áttekinthetőség miatt választottam ezt. Mivel a maszk (ÉS) csak a negyedik kódban volt szükséges, és már láttuk, hogy nem kell kiszámítani (ez mind a maradék), ezért nem szerepel a végső kifejezésben az egyszerűsítés érdekében, bár emlékeznünk kell hogy a felhasznált adattípus (byte ) csak a 6 legkisebb jelentőségű bitet veszik fel.

    A többi balra forgatása az előzőhöz hasonló módon általánosítható. Az is látható, hogy az alkalmazott maszk (ÉS) ugyanazon a bitforgatáson megy keresztül, de ellenkező irányban. Ez az oka az elmozdulás kiszámításának 4-(numero_valor%3)*2 mielőtt a kifejezés egyes részeinek megfelelő értelemben alkalmazná.

    A következő példa bemutatja, hogyan használhatja a könyvtárat egy szöveges karakterlánc kódolására (ne feledje Bázis64 bármilyen adatkészlethez, például képhez használható). A következő kódban van néhány részlet, amelyeket érdemes tisztázni. Először is, egy speciális szimbólumot (a ~ szimbólumot) használtak a szöveg végének jelzésére, a hardveres jel vagy a szöveg hosszának jelzése helyett. Logikailag ez a szimbólum nem lehet része a kódolt adatoknak.

    A második kérdés, amelyet figyelembe kell venni, amennyire nyilvánvaló, az az, hogy a célállomás dekóderének tudnia kell, hogy a hozzá eljutó információ hogyan jelenik meg. A szöveg olyan karaktereket tartalmaz, amelyek nem tartoznak a készlethez ASCII nyomtatható (32-126), például ékezetes betűk. Arduino két bájtot fog használni (UTF-8) jelképezi ezeket a karaktereket. A szokásosat nem lehet egyszerűen használni \0 szöveglezáróként, mivel sok esetben az első bájt, amellyel egy karaktert ábrázol, pontosan nulla lesz.

    Az előző példa 26. sora a használatát mutatja be könyvtár az Arduino számára a Base64 kódolásához. Csak a módszert kell feltüntetni convertir minden kódolni kívánt bájt és opcionálisan az utolsó, vagy ha nem, állítsa le a konvertálást a metódussal terminar amikor a végére érsz.

    Amint az alábbi képernyőképen látható, a példaprogram a könyvtár az Arduino számára a Base64 kódolásához először megjeleníti a kódolandó szöveget Bázis64, jelen esetben az óriások híres dalának kezdete Les Luthiers, és ezt követően a kódolás eredménye Bázis64 sorhossz formátum használatával PANTOMIM.

    Base64 kódolás Arduino-val. Szövegkonverziós kimeneti példa

    Hozzászólás Comment

    Lehet, hogy lemaradtál