1. base64 格式的數(shù)據(jù)是如何實現(xiàn)的

        共 1964字,需瀏覽 4分鐘

         ·

        2021-03-17 10:16

        (給前端大學(xué)加星標,提升前端技能.

        作者:隱冬

        https://juejin.cn/post/6913532512346046472

        Base64是網(wǎng)絡(luò)上最常見的用于傳輸8Bit字節(jié)碼的編碼方式之一,Base64就是一種基于64個可打印字符來表示二進制數(shù)據(jù)的方法。

        對于前端來說,一切可以放路徑的地方,都可以使用base64來替代。

        node中的buffer對象可以通過toString('base64')將buffer對象輸出為base64。我們這里來簡述一下漢字是如何轉(zhuǎn)換成為base64的實現(xiàn)原理。

        比如我們來探索一下漢子"哈"通過base64的轉(zhuǎn)換結(jié)果為"5ZOI"是如何實現(xiàn)的。

        首先我們利用nodejs中Buffer對象的from方法,將漢子轉(zhuǎn)換為buffer對象??梢缘玫絜5 93 88三個16進制的字節(jié)。可以看到這個函子由3個字節(jié)組成。

        const buf = Buffer.from("哈");
        console.log(buf); // // e5 93 88

        然后再將每個字節(jié)轉(zhuǎn)換為二進制, 0x代表16進制,我們需要在e5 93 88前面分別拼上0x, toString方法中可以傳入要轉(zhuǎn)換的字進制,這里寫2。

        // 將每個字節(jié)轉(zhuǎn)為二進制
        (0xe5).toString(2); // 11100101
        (0x93).toString(2); // 10010011
        (0x88).toString(2); // 10001000

        接著將得到的三個2進制數(shù)據(jù)連接在一起,得到111001011001001110001000。

        111001011001001110001000

        然后將111001011001001110001000每六個一組進行切割,這里可以切割為4部分。

        111001 011001 001110 001000

        接著再每一組的前面用0補位,湊成8位。

        00111001
        00011001
        00001110
        00001000

        將得到的四組數(shù)據(jù)分別再轉(zhuǎn)換為10進制數(shù)據(jù)。這里一共可以獲得4個數(shù)字,是不是"哈"這個字轉(zhuǎn)換為base64后獲取到的4個字符有些接近了。

        parseInt('00111001'2); // 二進制變?yōu)?0進制 57
        parseInt('00011001'2); // 二進制變?yōu)?0進制 25
        parseInt('00001110'2); // 二進制變?yōu)?0進制 14
        parseInt('00001000'2); // 二進制變?yōu)?0進制 8

        base64的編碼數(shù)據(jù)基本是從A-Z加上a-z再加上0123456789+/中獲取的。我們拼接出這個字符串。

        // base64編碼
        let str = 'ABCDEFGHIGKLMNOPQRSTUVWSYZ';
        str += str.toLowerCase(); // 小寫字符拼接一次
        str += '0123456789+/'// 數(shù)字拼接一次

        我們知道,字符串可以類似數(shù)組一樣通過下標來獲取指定位置的字符,這里通過上面10進制轉(zhuǎn)換之后的值分別獲取對應(yīng)位置的字符,57獲取的就是5,25獲取的就是Z,14獲取的就是O,8獲取的就是I。

        將這四個字符拼接在一起就是5ZOI。就是之前轉(zhuǎn)換后的base64。

        const base64 = str[57] + str[25] + str[14] + str[8]; // 5ZOI

        base64轉(zhuǎn)譯步驟

        1、將字符串通過Buffer.from獲取buffer,并將buffer中的每個16的buffer字節(jié)轉(zhuǎn)為2進制

        2、將所有二進制拼接在一起,6個一組進行劃分,在前面補00,湊成8位二進制

        3、將新的二進制轉(zhuǎn)換成10進制

        4、在base64集合中分別通過10進制下標取出,并鏈接


        點贊和在看就是最大的支持??

        瀏覽 38
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 香蕉黄色片 | 3p两男一女上下被填满漫画 | 国产你懂得 | 91av在线播放 | 色婷婷精品视频 |