base64編碼解碼原理
base64編碼是用64個可見字元表示任意二進位制資料的方法。
以3個8bit的字元為一組,針對每組獲取每個字元的ascii編碼,將ascii編碼轉換成8bit的二進位制,得到一組24bit的位元組;說明:如果文字結尾不足3個字元,對轉化為6為字元後,後面剩餘的二進位制位可能是2位或者4位(因為是n%6),餘數為0時代表整除了,在剩餘二進位制位後面補0至6個二進位制位,再在結尾加=號,使編碼後的字元滿足(n*8+等號個數)/6=base64的字元個數將24bit劃分為4個6bit的位元組,每個6bit的位元組高兩位補0,得到4個8bit的位元組
將4個8bit的位元組轉換成十進位制,對照base64編碼表得到編碼後的字元
base64編碼表:
專案設計
編碼模組
//base64 編碼(編碼時字元是8bit表示)
void base64_encode(const
char* filename)
ret_len = ret_len * 4 + 1;
ret = (char *)malloc(ret_len);
if (ret == null)
memset(ret, 0, ret_len);
f = ret;
//每次都是三個字元進行編碼,直到所有的字元都進行編碼
while (tmp < data_len)
//prepare<<8:每個字元佔8個bit,源文字中每個是3個字元,每次或之前都向左移8位;保證3個字元得到乙個二進位制編碼
//data[tmp]&0xff:保證生成的字串是8bit位
prepare = ((prepare << 8) | (data[tmp] & 0xff));
tmp++;
temp++;
}//防止上述while退出時,最後字元數不足3個,prepare還是要湊夠3個字元的位置
prepare = (prepare << ((3 - temp) * 8));
//4次for迴圈,當3個字元存在的時候,就可以將其拆成4個字元
for (int i = 0; i < 4; i++)
else
*f = base[changed[i]];
f++;}}
*f = '\0';
/*printf("%s\n", ret);*/
writetofile(ret, fin);
fclose(fin);
fclose(fout);
}
解碼模組
//base64 解碼
void base64_decode(const
char *filename)
if (*(data + data_len - 2) == '=')
//為了4個字元轉3個字元的時候位元組進行對齊
switch (equal_count)
ret = (char *)malloc(ret_len);
if (ret == null)
memset(ret, 0, ret_len);
f = ret;
while (tmp < (data_len - equal_count))
prepare = (prepare << 6) | (find_pos(data[tmp]));
temp++;
tmp++;
}prepare = prepare << ((4 - temp) * 6);
for (int i = 0; i < 3; i++)
*f = (char)((prepare >> ((2 - i) * 8)) & 0xff);
f++;}}
*f = '\0';
/*printf("%s\n", ret);*/
writetofile(ret, fin);
fclose(fin);
fclose(fout);
}
C Base64解碼小工具編寫
1 介面如下 2 關鍵 如下 var reqstr txtinput.text.trim 輸入字串 var resstr 輸出結果 var errmsg if reqstr.length 0 catch exception ex catch exception ex2 view code 說明 2....
C 檔案複製小工具
60string newfile 定義儲存的位置,和儲存的名稱 61 62for inti 1 i convert.toint32 textbox2.text i 從textbox2中獲取要複製的次數 63 67messagebox.show 複製完成 68 69 70 view source pr...
csv檔案生成小工具
如果用shell來做這件事的,通常是兩種方法 1.捕獲終端輸出,後續對輸出做一定處理。但是終端輸出實際上已經丟失了很多格式資訊,很難做到完善處理。2.用mysql內建的file命令一次性生成檔案。mysql內建的函式功能有限,沒法做到比較好的輸出格式化。所以選擇了python來做。主要注意幾點 1....