如何在delphi中实现对文件进行base64编码 如何在delphi中实现对文件进行base64编码

\u600e\u4e48\u7528JAVA\u5bf9\u4e00\u4e2a\u6587\u4ef6\u8fdb\u884cbase64\u7f16\u7801

JAVA\u5bf9\u4e00\u4e2a\u6587\u4ef6\u8fdb\u884cbase64\u7f16\u7801import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; // \u5c06 s \u8fdb\u884c BASE64 \u7f16\u7801 public static String getBASE64(String s) { if (s == null) return null; return (new sun.misc.BASE64Encoder()).encode( s.getBytes() ); } // \u5c06 BASE64 \u7f16\u7801\u7684\u5b57\u7b26\u4e32 s \u8fdb\u884c\u89e3\u7801 public static String getFromBASE64(String s) { if (s == null) return null; BASE64Decoder decoder = new BASE64Decoder(); try { byte[] b = decoder.decodeBuffer(s); return new String(b); } catch (Exception e) { return null; } }

TBase64 = Class(TObject)private FOStream: TStream; FIStream: TStream;Public { \u8f93\u5165\u6d41 } Property IStream : TStream Read FIStream Write FIStream; { \u8f93\u51fa\u6d41 } Property OStream : TStream Read FOStream Write FOStream; { \u7f16\u7801 } Function Encode : Boolean; { \u89e3\u7801 } Function Decode : Boolean;End;implementationconst SBase64 : string = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz~#%&*+-'; UnBase64: array[0..255] of byte = (128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //0-15 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //16-31 128,128,128, 58,128, 59, 60,128, 128,128, 61, 62,128, 63,128,128, //32-47 128,128, 0, 1, 2, 3, 4, 5, 6, 7,128,128,128,128,128,128, //48-63 128, 8, 9, 10, 11, 12, 13, 14, 15,128, 16, 17, 18, 19, 20,128, //64-79 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,128,128,128,128,128, //80-95 128, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,128, 43, 44, 45, //96-111 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,128,128,128, 57,128, //112-127 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //128-143 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //128-143 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //144-159 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //160-175 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //176-191 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //192-207 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //208-223 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //224-239 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128); //240-255{ TBase64 }function TBase64.Decode: Boolean;var j, k: integer; b: byte; W, Tmp : Byte; //\u7528\u4e8e\u9605\u8bfb\u6d41\u7684\u4e34\u65f6\u53d8\u91cfbegin Result := FALSE; If (FIStream Nil) And (FOStream Nil) Then Begin { \u521d\u59cb\u5316} IStream.Position := 0; OStream.Position := 0; b := 0; j := 0; K := 2; while (IStream.Position '.') Do Begin if j = 0 then begin b := UnBase64[Tmp]; k := 2; end else begin W := UnBase64[Tmp] or ((b shl k) and $C0); OStream.Write(W, 1); inc(k,2); end; inc(j); j := j and 3; end; End;end;function TBase64.Encode: Boolean;var SBuffer : Array [1..4] Of Byte; j, k: integer; b: byte; Tmp : Byte; {### \u7528\u4e8e\u9605\u8bfb\u6d41\u7684\u4e34\u65f6\u53d8\u91cf ###}begin Result := FALSE; If (FIStream Nil) And (FOStream Nil) Then Begin { \u521d\u59cb\u5316 } IStream.Position := 0; OStream.Position := 0; b := 0;j := 2; k := 2; while IStream.Position 4 then begin SBuffer[1] := Byte(SBase64[b + 1]); b := 0; j := 2; k := 2; OStream.Write(SBuffer, 4); End; End; End; { \u5e73\u6574\u6570\u636e\u5230 SBuffer } if j 2 then begin SBuffer[j] := Ord('.'); SBuffer[1] := Byte(SBase64[b + 1]); OStream.Write(SBuffer, j); end else Begin SBuffer[1] := Ord('.'); OStream.Write(SBuffer, 1); end; Result := TRUE; end;end;//--------------------------------------------------------------\u7ffb\u8bd1\u6210C++\u7684\uff1aclass TBase64 : public TObject{private: TSream FOStream; TStream FIStream;public: //\u8f93\u5165\u6d41 __property TStream IStream = { read = FIStream , write = FIStream }; //\u8f93\u51fa\u6d41 __property TStream OStream = { read = FOStream , write = FOStream }; //\u7f16\u7801 bool Encode(); //\u89e3\u7801 bool Decode();}; const char * SBase64 = "23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz~#%&*+-"; const unsigned char UnBase64[256] ={ 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //0-15 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //16-31 128,128,128, 58,128, 59, 60,128, 128,128, 61, 62,128, 63,128,128, //32-47 128,128, 0, 1, 2, 3, 4, 5, 6, 7,128,128,128,128,128,128, //48-63 128, 8, 9, 10, 11, 12, 13, 14, 15,128, 16, 17, 18, 19, 20,128, //64-79 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,128,128,128,128,128, //80-95 128, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,128, 43, 44, 45, //96-111 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,128,128,128, 57,128, //112-127 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //128-143 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //128-143 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //144-159 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //160-175 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //176-191 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //192-207 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //208-223 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128, //224-239 128,128,128,128,128,128,128,128, 128,128,128,128,128,128,128,128}; //240-255 bool TBase64::Decode(){ int j , k; unsigned char b; unsigned char W , Tmp; bool Result = false; if ( FIStream != NULL && FOStream != NULL ) { //\u521d\u59cb\u5316 IStreamPosition = 0; OStreamPosition = 0; b = 0; j = 0; K = 2; while (IStream.Position > k) & 0xC0); OStream.Write(W, 1); k+=2; } j++; j &= 3; } } return Result;}bool TBase64::Encode(){ unsigned char SBuffer[4]; int j , k; unsigned char b , Tmp;//\u7528\u4e8e\u9605\u8bfb\u6d41\u7684\u4e34\u65f6\u53d8\u91cf bool Result = false; If ( FIStream != NULL && FOStream != NULL ) { //\u521d\u59cb\u5316 IStream.Position = 0; OStream.Position = 0; b = 0; j = 2; k = 2; while ( IStream.Position 4 ) { SBuffer[0] = Byte(SBase64[b]); b = 0; j = 2; k = 2; OStream.Write(SBuffer, 4); } } } //\u5e73\u6574\u6570\u636e\u5230 SBuffer if ( j != 2 ) { SBuffer[j] = '.'; SBuffer[0] = (unsigned char)(SBase64[b + 1]); OStream.Write(SBuffer, j); } else { SBuffer[0] = '.'; OStream.Write(SBuffer, 1); } Result = true; } return Result;}

在 delphi 中,实现对文件进行 base64 编码,步骤如下:

1、下载 CnPack 组件包(CnVCL)

CnVCL 是一个涵盖不可视工具组件、界面控件、网络通讯组件、多语言处理等多个方面的 Delphi/C++ Builder 组件包


2、将下载的 zip 解压到文件夹,再如图打开其中与 delphi 版本相对应的 dpk,进行组件安装:



3、打开 Option,添加 cnvcl 下载的各个路径:




4、提供 Base64 编码、解码功能函数的单元文件在 CnBase64.pas 中:



该单元提供了 Base64 的功能函数:



5、完成上面的步骤之后,就可以实现代码的编程了。

以下是提供的一个示例:

procedure TForm1.btnEncodeClick(Sender: TObject);
var
  Stream: TStream;
  outStr: string;
begin
  Stream := TFileStream.Create('f:\小说.txt',fmOpenRead);//载入文件内容
  Base64Encode(Stream,outStr);
  Memo1.Lines.Add(outStr);
  Stream.Free;
end;

procedure TForm1.btnDecodeClick(Sender: TObject);
var
  txt: string;
  r: Byte;
  Str: AnsiString;
begin
  txt := Memo1.Lines.Text;
  r := Base64Decode(txt, Str, True);
  Memo2.Lines.Add(Str)
end;


代码运行截图:




  • 濡備綍鍦╠elphi涓疄鐜板鏂囦欢杩涜base64缂栫爜
    绛旓細delphi 涓鏈変釜EncdDecd绫伙紝杩欎釜鏄痙elphi鑷甫鐨刡ase64缂栫爜绫伙紝閲岄潰鎻愪緵浜嗙紪鐮佸拰瑙g爜鍑芥暟鍒嗗埆鏄細function EncodeString(const Input: string): string; //缂栫爜 function DecodeString(const Input: string): string; //瑙g爜
  • 濡備綍鍦╠elphi涓疄鐜板鏂囦欢杩涜base64缂栫爜
    绛旓細鍦 delphi 涓锛瀹炵幇瀵规枃浠杩涜 base64 缂栫爜锛屾楠ゅ涓嬶細1銆佷笅杞 CnPack 缁勪欢鍖咃紙CnVCL锛塁nVCL 鏄竴涓兜鐩栦笉鍙宸ュ叿缁勪欢銆佺晫闈㈡帶浠躲佺綉缁滈氳缁勪欢銆佸璇█澶勭悊绛夊涓柟闈㈢殑 Delphi/C++ Builder 缁勪欢鍖 2銆佸皢涓嬭浇鐨 zip 瑙e帇鍒版枃浠跺す锛屽啀濡傚浘鎵撳紑鍏朵腑涓 delphi 鐗堟湰鐩稿搴旂殑 dpk锛岃繘琛岀粍浠跺畨瑁咃細3銆...
  • 鐤戦棶鍙ユ爣棰:濡備綍鍦―elphi 5涓疄鐜澶氱嚎绋嬪拰鏂囦欢澶勭悊?
    绛旓細- **5.9 娑堟伅涓庝簨浠跺搴 绗3绔 浠g爜鏂囨。涓庣粍缁囷細- **6.1 浠g爜鏍煎紡瑙勮寖 - **6.2 Object Pascal璇硶 - **6.3 鏂囦欢绫诲瀷涓庣粨鏋 - **6.4 鐣岄潰涓庢暟鎹粍浠 - **6.5 鍖呬笌缁勪欢绠$悊 - **6.6 浠g爜鏂囨。缁存姢 绗4绔 ActiveX鎺т欢闆嗘垚锛- **7.1 鎺т欢浠嬬粛 - **7.2 Delphi缁勪欢灏佽 - **...
  • 濡備綍鍦╠elphi涓疄鐜板鏂囦欢杩涜base64缂栫爜
    绛旓細TBase64 = Class(TObject)private FOStream: TStream; FIStream: TStream;Public { 杈撳叆娴 } Property IStream : TStream Read FIStream Write FIStream; { 杈撳嚭娴 } Property OStream : TStream Read FOStream Write FOStream; { 缂栫爜 } Function Encode : Boolean; { 瑙g爜 } ...
  • delphi鐨勬枃浠鎿嶄綔
    绛旓細Delphi鍙Windows鎿嶄綔绯荤粺鐨勬敞鍐岃〃銆佸瓨鍌ㄨ澶囧拰鏂囦欢绯荤粺杩涜鏂逛究鐨璁块棶銆傚唴缃崟鍏僐egistry.pas涓彁渚涗簡TRegistry銆乀RegIniFile銆乀RegistryIniFile涓変釜灏佽绫伙紝鎻愪緵浜嗗父鐢ㄧ殑娉ㄥ唽琛ㄣ侀厤缃枃浠舵搷浣滃姛鑳姐侰lasses.pas鍗曞厓涓紝鐢盩Stream娲剧敓鐨凾HandleStream銆乀FileStream銆乀MemoryStream銆乀StringStream銆乀ResourceStream锛...
  • Delphi濡備綍瀹炵幇閫変腑鏂囦欢鎴鏂囦欢澶
    绛旓細鍏跺疄鎴戞墍鐭ラ亾鐨鏈変袱绉嶆柟娉曡兘瀹炵幇锛屽厛璇寸涓绉嶆渶绠鍗曠殑锛屽氨鏄敤璧勬簮绠$悊鍣ㄥ懡浠ゅ紑鍏筹紝濡備笅浠g爜锛歶ses Shellapi;銆//浠ヤ究浣跨敤ShellExecute function OpenAndSetFileSelected(const aFullExename: String): Boolean;begin Result:= FileExists(aFullExename); if Result then ShellExecute(0, 'open',...
  • 濡備綍鐢Delphi瀹炵幇瀛愮洰褰曠骇鐨勬枃浠鏌ヨ
    绛旓細锛堜互涓婂嚱鏁Delphi鍦ㄧ嚎甯姪涓湁璇﹀敖瑙i噴 鍦ㄦ涓嶈禈杩帮級锛 鐢‵ileExists鍑芥暟鏌ユ壘褰撳墠鐩綍 锛 瀵绘壘鏄惁鏈夋弧瓒虫潯浠鐨勬枃浠瀛樺湪 锛 渚濇浣垮悇涓瓙鐩綍鎴愪负褰撳墠鐩綍 锛 閫掑綊璋冪敤鏈嚱鏁 锛 閲婃斁璧勬簮 锛 杩斿洖鏌ヨ缁撴灉 浠g爜濡備笅 浠庢悳绱㈣褰曚腑鍒ゆ柇鏄惁鏄瓙鐩綍 function IsValidDir(SearchRec:TSearchRec):Boolean; begin ...
  • 鍦―elphi 涓庢牱瀹炵幇灏嗘枃浠朵繚瀛樺埌鎸囧畾鏂囦欢澶
    绛旓細function SelectDirectory(const Caption: string; // 涓枃瀵硅瘽妗 const Root: WideString;var Directory: string): Boolean; overload;//浠ヤ笅鏄Delphi甯姪鐨凞emo:uses FileCtrl;const SELDIRHELP = 1000;procedure TForm1.Button1Click(Sender: TObject);var Dir: string;begin Dir := 'C:/MYDIR';...
  • [delphi缂栫▼]濡備綍瀹炵幇鐩戣鎸囧畾鏂囦欢澶圭殑鏂囦欢鎿嶄綔
    绛旓細(FILE_NOTIFY_INFORMATION *) buffer;DWORD BytesReturned = 0;ReadDirectoryChangesW( hDirectory, pNotify, sizeof(buffer),true, FILE_NOTIFY_CHANGE_FILE_NAME, &BytesReturned, NULL, NULL );ShowMessage( WideCharToString( pNotify->FileName ) );鎴戞槸鐢╞cb鍐鐨锛屼綘灏嗗ス杞负delphi灏辫浜嗐
  • 璇烽棶:濡備綍鍦―elphi涓疄鐜鍙屽嚮鎵撳紑鐩稿簲鏂囦欢
    绛旓細shellexecute(Handle, nil{鍙傛暟}, 'open'{鏁曚护:涓鑸负open鎴栫┖}, 'c:\windows\notepad.exe'{鏂囦欢鍚:鍙饱琛屾枃浠舵垨宸插湪浣撶郴涓缓绔嬫帴娲藉叧绯鐨勬枃浠, nil, 1);
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网