解碼的具體過程:
編碼的4個位元組剛好對應原始碼的3個位元組,因此在解碼時,每4個位元組處理一次。
如例:原始碼ABC,透過編碼之後的字串為:QUJD,透過對照base64的ascii表,我們可以得知,編碼的二進位制表示形式為:00010000 00010100 00001001 00000011
注意編碼的最高兩位和原始碼沒有關係,只是每一個位元組後六位才和原始碼有關,因此編碼中的每個字元我們只處理該字元的後6位二級制編碼。
由編碼的過程可以得知:1)第一個位元組的前6位,即010000,就是原始碼第一個位元組的前六位;編碼第二個位元組的前2位,即01是原始碼第一個位元組的後兩位;這樣就可以得到原始碼第一個位元組的二級製表示形式為01000001,即就是A。
對應的程式碼為:
byteArray[4]=(buteArray[0]<<2) & 0xfc;//得到第一個字元的前6位
byteArray[4]=byteArray[4] | (buteArray[1]>>4) & 0x03;//將前6位和第二個位元組前2位按位或,得到源字串的第一個位元組
2)編碼第二個位元組的後4位,即0100,就是原始碼第二個位元組的前4位;編碼第3個位元組的前4位,即0010,就是原始碼第二個位元組的後4位;這樣就可以得到原始碼第2個位元組的二進位制表示形式為01000010,即就是B。
byteArray[4]=(buteArray[1]<<4) & 0xf0;//得到第2個字元的後4位
byteArray[4]=byteArray[4] | (buteArray[2]>>2) & 0x0f;//將第二個位元組後4位和第三個自己的前4位按位或,得到源字串的第2個位元組
3)編碼第三個位元組的後2位,即01,就是原始碼第3個位元組的前3位;編碼第4個位元組的前6位,即000011,就是原始碼第3個位元組的後6位;這樣就可以得到原始碼第3個位元組的二進位制表示形式為01000011,即就是C。
byteArray[4]=(buteArray[2]<<6) & 0xc0;//得到第3個字元的後2位
byteArray[4]=byteArray[4] | (buteArray[3]>>2) & 0x3f;//將第3個位元組後2位和第4個自己的前6位按位或,得到源字串的第3個位元組
編碼共四個位元組,處理完成,最終得到的解碼字串為ABC。
對於編碼中的=,我們不需要去處理它,這是因為該字元只是base64編碼時加的一個字元,其實的編碼時在最後一個字元加了00,因此不用去處理。而且這個字元如果存在,只可能在編碼字串的後兩個位元組或一個位元組才有的,因此在解碼之前,就將該字元剔除。
解碼的具體過程:
編碼的4個位元組剛好對應原始碼的3個位元組,因此在解碼時,每4個位元組處理一次。
如例:原始碼ABC,透過編碼之後的字串為:QUJD,透過對照base64的ascii表,我們可以得知,編碼的二進位制表示形式為:00010000 00010100 00001001 00000011
注意編碼的最高兩位和原始碼沒有關係,只是每一個位元組後六位才和原始碼有關,因此編碼中的每個字元我們只處理該字元的後6位二級制編碼。
由編碼的過程可以得知:1)第一個位元組的前6位,即010000,就是原始碼第一個位元組的前六位;編碼第二個位元組的前2位,即01是原始碼第一個位元組的後兩位;這樣就可以得到原始碼第一個位元組的二級製表示形式為01000001,即就是A。
對應的程式碼為:
byteArray[4]=(buteArray[0]<<2) & 0xfc;//得到第一個字元的前6位
byteArray[4]=byteArray[4] | (buteArray[1]>>4) & 0x03;//將前6位和第二個位元組前2位按位或,得到源字串的第一個位元組
2)編碼第二個位元組的後4位,即0100,就是原始碼第二個位元組的前4位;編碼第3個位元組的前4位,即0010,就是原始碼第二個位元組的後4位;這樣就可以得到原始碼第2個位元組的二進位制表示形式為01000010,即就是B。
對應的程式碼為:
byteArray[4]=(buteArray[1]<<4) & 0xf0;//得到第2個字元的後4位
byteArray[4]=byteArray[4] | (buteArray[2]>>2) & 0x0f;//將第二個位元組後4位和第三個自己的前4位按位或,得到源字串的第2個位元組
3)編碼第三個位元組的後2位,即01,就是原始碼第3個位元組的前3位;編碼第4個位元組的前6位,即000011,就是原始碼第3個位元組的後6位;這樣就可以得到原始碼第3個位元組的二進位制表示形式為01000011,即就是C。
對應的程式碼為:
byteArray[4]=(buteArray[2]<<6) & 0xc0;//得到第3個字元的後2位
byteArray[4]=byteArray[4] | (buteArray[3]>>2) & 0x3f;//將第3個位元組後2位和第4個自己的前6位按位或,得到源字串的第3個位元組
編碼共四個位元組,處理完成,最終得到的解碼字串為ABC。
對於編碼中的=,我們不需要去處理它,這是因為該字元只是base64編碼時加的一個字元,其實的編碼時在最後一個字元加了00,因此不用去處理。而且這個字元如果存在,只可能在編碼字串的後兩個位元組或一個位元組才有的,因此在解碼之前,就將該字元剔除。