Arduino ile Base64 kodlama kütüphanesi

Arduino ile Base64 kodlama kütüphanesi

Arduino ile Base64 kodlama kütüphanesi

Base64 uzunluğu dördün katları olan mesajlar halinde gruplandırılmış 64 sembolü kullanan bir kodlama sistemidir. Bu mesajlar (veri paketleri) gerekirse bir artı simgesiyle (dolayısıyla 65 kullanılır) tamamlanır; kodlanan yararlı bilgiler daha kısa uzunluktaysa genellikle eşittir işareti (=) kullanılır.

İçindekiler

    64 işaret kullanarak kodun 10 rakamı ve büyük ve küçük harfleri (26+26) ile çalışabilirsiniz. ASCII, sorun şu ki, diyelim ki 62 tane net sembol artı farklı uygulamalarda değişen iki sembol var. Her ne kadar bazen "karakterler" ifadesiyle anılsa da ASCII basılabilir", gerçekte bunlar 32 (boşluk) koduyla temsil edilenden, gerçekten yazdırılabilir 126 olan 95'ya (~) kadar değişen değerlerdir.

    Kodlamanın uygulanması Base64 en çok kullanılanı PEMtarafından da kullanılan MIMEPaketlerin uzunluğunun dördün katları olması için ekstra "+" ve "/" işaretleriyle ve "=" işaretiyle çalışın. A-Z harfleri 0-25. konumları, a-z harfleri 26-51. konumları, 0-9 rakamları 52-61. konumları, artı işareti (+) 62. konumları ve 63. konum da eğik çizgi (/) ile doldurulur.

    Verileri formatta temsil etmenin yolu Base64 orijinal verilerden grupların alınmasından oluşur 6 bit karşılık gelen kodla temsil edilir. Eğer bitler kalırsa sağdaki sıfırlarla doldurulur. Ortaya çıkan kod sayısı dördün katı değilse sağa doğru eşit işaretlerle doldurulur.

    Aşağıdaki resimde kodlama gösterilmektedir ASCII bir metnin ("ohm") ve dönüştürülme şeklinin Base64. 7 sembol olduğundan son mesajın sonuna eşittir işareti konulması gerekir. "Ohm" metninin olduğu söylenebilir. ASCII «b2htaW8=''e eşdeğerdir Base64.

    Base64 kodlama örneği

    Kodlamanın özel kullanımları Base64 Ayrıca genellikle maksimum hat uzunluğu da uygularlar. Hayata geçirme MIME Her satırı 76 karakterle sınırlar. Normalde satırlar bir satır sonu koduyla (CR, 0x0D değeriyle temsil edilir) ayrılacaktır. ASCII) ve başka bir yeni satır (koda karşılık gelen NL) ASCII 0x0A).

    Kodlamayı uygularken eklenen rahatsızlık Base64 az sayıda kaynağa sahip bir cihazda, çoğu zaman olduğu gibi mikrodenetleyici bilgi geldikçe veya bir kodla kodlamanız gerektiğidir. tampon Bu aynı zamanda, örneğin özel bir kod ekleyerek veya seviyesi (alımla senkronize edilmiş) mesajın durumunu gösteren bir pin kullanarak orijinal mesajın sonuna ulaşıldığını belirten bir sistemin sağlanmasını gerektirir.

    Aşağıdaki örnek kod bir Arduino'nun Base64'te kodlayacağı kütüphane her iki kriterle de uygulanır: gelen bilginin kodlanması ( tampon) ve bir uyarı sinyalinin bitmesini bekleyin.

    Kod hesaplamasının temel kısmı Base64 Şu ifadeyle yapılır:
    (valor_original>>(2+(numero_valor%3)*2))|resto_base64
    ve kalanın şu ifadeyle hesaplanması:
    (valor_original&(MASCARA_B64>>desplazamiento))<<desplazamiento,
    olma desplazamiento şu ifadeyle hesaplanan bir değer:
    4-(numero_valor%3)*2

    Bu ifadeleri elde etmek için izlenen süreç, dört kodun her birinin hesaplanmasının genelleştirilmesinden oluşur. Base64 bu, orijinal değerin üç baytını temsil etmenin sonucudur.

    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

    metin ile Base64 Yukarıdaki sözde kod, içindeki kodu ifade eder. Base64 bu hesaplanıyor. İfade kullanıldı byte_n kodlanan n'inci bayta atıfta bulunmak için. Metin resto kodlanan baytın kalan bitlerini temsil eder. Hesaplamanın başında kalanın sıfır olduğu varsayılır.

    Açıklık sağlamak için, önceki sözde kodda 6 bitlik maske tüm kodların hesaplanmasına dahil edilmiştir, ancak yalnızca sonuncusunu belirlemek gerekir, çünkü diğerleri döndürülür ve böylece en fazla iki bit her zaman kaybolur. önemli.

    Görüldüğü gibi dördüncü kod tamamen kalandır ve sonradan bir kalan hesaplamaya gerek yoktur; Bu nedenle, kodlanmış bayt başına bir tane olmak üzere yalnızca üç adımı gerçekleştirmek gerekir. Bir paketteki üçüncü bayt kodlanmamışsa, son kodun sağdaki sıfırlarla doldurulması gerekeceğini unutmamak önemlidir. Base64 elde edilmiştir.

    Genelleştirmek gerekirse, kodu hesaplayan ifadenin sağa döndürülmesi Base64 olarak temsil edilebilir 2+(numero_byte%3)*2 böylece parantez içindeki kısım sıfırdan ikiye dönecek ve her adımda 2, 4 ve 6 elde edilecektir. Tabii ki genelleme yapmanın tek yolu bu değil ama bunu işlevsellik ve her şeyden önce netlik açısından seçtim. Maske (AND) yalnızca dördüncü kodda gerekli olduğundan ve hesaplanmasına gerek olmadığı zaten görüldüğünden (hepsi geri kalandır), basitleştirmek için son ifadeye dahil edilmemiştir, ancak hatırlamamız gerekir. kullanılan veri türünde (bayt) yalnızca en az anlamlı 6 bit alınır.

    Geri kalanın sola dönüşü öncekine benzer bir şekilde genelleştirilebilir. Ayrıca uygulanan maskenin (AND) aynı bit dönüşüne ancak ters yönde maruz kaldığı da görülebilir. Yer değiştirmenin hesaplanmasının nedeni budur. 4-(numero_valor%3)*2 ifadenin her bir kısmına karşılık gelen anlamda uygulamadan önce.

    Aşağıdaki örnek, bir metin dizesini kodlamak için kitaplığın nasıl kullanılacağını gösterir (unutmayın: Base64 örneğin bir görüntü gibi herhangi bir veri kümesi için kullanılabilir). Aşağıdaki kodda açıklığa kavuşturulması ilginç olan birkaç ayrıntı vardır. İlk olarak, bir donanım sinyali veya metnin uzunluğunu belirtmek yerine, metnin sonunu belirtmek için özel bir simge (~ simgesi) kullanıldı. Mantıksal olarak bu sembol, kodlanan verinin bir parçası olamaz.

    Dikkate alınması gereken ikinci konu, her ne kadar açık olsa da, hedefteki kod çözücünün kendisine ulaşan bilginin nasıl temsil edildiğini bilmesi gerektiğidir. Metin sete ait olmayan karakterler içeriyor ASCII yazdırılabilir (32'den 126'ya kadar), örneğin aksanlı harfler. Arduino iki bayt kullanacak (UTF-8) bu karakterleri temsil etmek için. Her zamanki gibi basitçe kullanılamaz \0 Çoğu durumda bir karakterin temsil edildiği ilk bayt tam olarak sıfır olacağından metin sonlandırıcı olarak kullanılır.

    Önceki örneğin 26. satırında kullanımı gösterilmektedir. Arduino'nun Base64'te kodlayacağı kütüphane. Sadece yöntemi belirtmek gerekir convertir kodlamak istediğiniz her bayt ve isteğe bağlı olarak sonuncusu olup olmadığı veya değilse, yöntemle dönüşümü durdurun terminar sona ulaştığınızda.

    Aşağıdaki ekran görüntüsünde görüldüğü gibi örnek program Arduino'nun Base64'te kodlayacağı kütüphane ilk önce kodlanacak metni görüntüler Base64bu durumda devlerin meşhur şarkısının başlangıcı Les Luthiersve ardından kodlamanın sonucu Base64 format satırı uzunluğunu kullanma MIME.

    Arduino ile Base64 kodlaması. Metin dönüştürme çıktısı örneği

    Yorum Ekle

    Kaçırmış Olabilirsiniz