前幾天,興趣所致,寫了2個delphi版的base64轉換函式,見《delphi版的base64轉換函式》一文。後來覺得這些函式使用不夠靈活,所以重新寫了幾個放在這裡,核心的轉換**用ba**寫的(不知是否快一點,不過,我覺得用彙編寫這種**好像比pascal還容易些,因為有些二進位制操作,高階語言不方便,同時使用彙編也能使演算法更合理,可比較《delphi版的base64轉換函式》**和彙編碼的注釋偽**),如果有錯誤和建議,請指正,本人不甚感激!
說明:本文**2023年7月23日重新作過一些優化修改,速度有所提高。
更新(2009.9.30):為了適應delphi2009以上版本,對**重新作了修訂,下面是用delphi2010寫的一段對檔案流編碼和解碼的例子,例子中用來進行驗證的md5碼類**見《重新組織編寫delphi的md2、md4、md5類》:
另有一點需要說明:有不少delphi新手對本文編碼(解碼)過程的無型別引數感到困惑,不知該傳遞什麼型別。其實,delph中有不少這類無型別引數,如常用的move過程,只要把它當著乙個byte型別的陣列看待就行了,當使用string型別作實參傳遞給無型別形參時,要把s[1]作為引數傳遞(string型別下標是從1開始的),或者用指標轉換,如pchar(s)^。如果是delphi2009及以上版本,string型別作實參傳遞給無型別形參時,要注意不能簡單的將length(s)傳遞給sourcesize,而應該是length(s) * sizeof(char),因為length(s)是字串的長度,而不是實際緩衝區的長度,delphi2009及以上版本中預設的string是widestring,char也等於widechar,每個char佔2位元組。當然用string型別傳遞給無型別引數計算的是unicode字串的base64編碼,只有用ansistring型別傳遞給無型別引數,或者使用strtobase64過程(會自動轉換string為ansistring),才可能是你需要的base64編碼.
物件base64轉碼 Base64編碼轉換
1 為什麼mime要有編碼轉換 在mime總結這篇經驗中,總結了mime相較於rfc 822的擴充套件功能,其中提到了rfc 822的缺陷 非英語字元都不能在電子郵件中使用 2 電子郵件中不能插入二進位制檔案 如 3 電子郵件不能有附件。能夠對文字進行簡單的加密 2 quoted printable...
base64轉碼 解碼
最近有業務需要使用base64轉碼,現在整理一下 window.btoawindow.atob示例window.btoa test d zda window.atob d zda test如果字串中包含中文,直接使用btoa會報錯,可以先使用encodeuricomponent進行編碼 window...
Base64轉換原理
base64是網路上最常見的用於傳輸8bit位元組碼的編碼方式之一,base64就是一種基於64個可列印字元來表示二進位制資料的方法。採用a z a z 0 9 再加乙個 做為補充符號,總共65個可顯示字元。從原來的24位變成32位 base64轉換後的字元長度比原來大三分之一左右 1 每3個位元組...