如何在delphi中实现对文件进行base64编码
JAVA对一个文件进行base64编码import sun.misc.BASE64Encoder; import sun.misc.BASE64Decoder; // 将 s 进行 BASE64 编码 public static String getBASE64(String s) { if (s == null) return null; return (new sun.misc.BASE64Encoder()).encode( s.getBytes() ); } // 将 BASE64 编码的字符串 s 进行解码 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 { 输入流 } Property IStream : TStream Read FIStream Write FIStream; { 输出流 } Property OStream : TStream Read FOStream Write FOStream; { 编码 } Function Encode : Boolean; { 解码 } 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; //用于阅读流的临时变量begin Result := FALSE; If (FIStream Nil) And (FOStream Nil) Then Begin { 初始化} 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; {### 用于阅读流的临时变量 ###}begin Result := FALSE; If (FIStream Nil) And (FOStream Nil) Then Begin { 初始化 } 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; { 平整数据到 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;//--------------------------------------------------------------翻译成C++的:class TBase64 : public TObject{private: TSream FOStream; TStream FIStream;public: //输入流 __property TStream IStream = { read = FIStream , write = FIStream }; //输出流 __property TStream OStream = { read = FOStream , write = FOStream }; //编码 bool Encode(); //解码 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 ) { //初始化 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;//用于阅读流的临时变量 bool Result = false; If ( FIStream != NULL && FOStream != NULL ) { //初始化 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); } } } //平整数据到 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;
代码运行截图:
delphi中更新表数据
ADOQuery的SQL属性是一个TStrings类型的对象(字符串列表对象),你调用3次Add(),就会向SQL中加入3行字符串,所以错了。将 SQL.Add('UPDATE TempTable');SQL.Add(' SET qty=b.qty');SQL.Add(' FROM TempTable a JOIN WasteBook b ON a.stockid=b.stockid');改为:SQL.Add('UPDATE TempT...
Delphi 7 中 PageControl 每一页的标签能不能隐藏掉
当然可以。设置页面的TabVisible属性。
delphi iocp wsasend 需要释放吗
其实按我的理解,可以放心大胆的投递多个重叠的WSASend,同时检查WSASend的第四个参数,如果发送不完全就补发,至于Get函数所返回的完成包,则不需要去多疑惑,肯定不会出现发送不完全的情况,否则重叠的意义何在?
希腊神话中有一个杀父娶母的是谁 原因何在? 最好是详细点
俄狄浦斯长大后,因为德尔菲(Delphi)神殿的神谕说,他会弑父娶母,不知道科林斯国王与王后并非自己亲生父母的俄狄浦斯,为避免神谕成真,便离开科林斯并发誓永不再回来。俄狄浦斯流浪到忒拜附近时,在一个岔路上与一群陌生人发生冲突,失手杀了人,其中正包括了他的亲生父亲。当时的忒拜被狮身人面兽...
怎么编程
1、VC、VB、Delphi …… ,你该学哪个? 具体到编程而言,我要告诉你:任何一种计算机语言,都是计算机科学理论的载体或表现形式。C++很神吗?Java很酷吗?它们差距很远吗?是的。但从理论的层面上讲,它们没有区别,都是“面向对象”理论的一个具体形式而已。 现在的程序员们被发行编译软件(通常我们将其称为“系统...
关于计算机语言。我想学编程,没有任何基础,面对那么多选择,我不知先...
.Net Framework则简化了这个问题,所有的事物都视为对象。操作系统中各种资源都是对象,这样编程就容易了。不过现在有一个模仿.Net Framework的第三方库mono,它可以实现用C#生成的应用程序在Linux上运行,但是mono并没有完全实现.Net Framework,所以有些特定功能无法在Linux上运行。当然未来你的程序主要面向...
如何用java实现对xp系统账户的登录\/切换\/注销功能
java里面本身没有这样的方法, 如果你想实现, 考虑jni本地化调用其他编译语言(如 c\/c++, delphi)的dll, 这些语言可以无缝的调用系统sdk api,如:ExitWindowsEx(EWX_LOGOFF or EWX_FORCE, 0);不过Window2000,NT,XP都要先取得SE_SHUTDOWN_NAME权限 ...
语言分析和记忆的概念
第三,致力于语言的逻辑方式创立,推动了计算机编程语言的出现。如,C++、JAVA、VB、Delphi等编程语言的创立。这样的编程语言应用于计算机的控制和执行,达到了编程控制和执行的逻辑必然,为人工智能提供了重要的逻辑驱动。分析哲学未能实现它的根本目标,其原因在我看来主要是:第一,分析哲学从未勘察过人类...
软件工程专业好不好?就业前景怎么样?
本专业培养掌握计算机软件基本理论知识,熟悉软件开发和管理技术、能够在计算机软件领域中从事软件设计、开发和管理的高级人才。 主修课程该专业除了学习公共基础课外,还将系统学习离散数学、数据结构、算法分析、面向对象程序设计、现代操作系统、数据库原理与实现技术、编译原理、软件工程、软件项目管理、计算机...
什么叫现实意义?
指某些东西在现实中具有一定的可操作性,并且有一定的价值.这就是现实意义,它是一种很客观的东西,不能依赖人的主观意志而改变 什么叫哲学,学它有什么现实意义 什么叫合理营养,它的现实意义何在 人的身体里面包含各种各样的营养元素。每一种营养元素,都按一定的比例存在于人的身体之中。如果某一种营养元素,在身体...
强任盐酸: delphi 中有个EncdDecd类,这个是delphi自带的base64编码类,里面提供了编码和解码函数分别是:function EncodeString(const Input: string): string; //编码 function DecodeString(const Input: string): string; //解码
芜湖市17292562132: Delphi如何将指定文件的内容读入 - ?
强任盐酸: INI文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,所以可视化的编程一族,如VB、VC、VFP、Delphi等都提供了读写INI文件的方法,其中Delphi中操作INI文件,最为简洁,这是因为Delphi提供了一个TInifile类,使我们可...
芜湖市17292562132: 如何用delphi编写一个文件管理器要求在程序中可以打开指定的文件夹,对文件进行复 - ?
强任盐酸: 我说一个思路:建立一个Form里面加上一上Edit 一个OpenDialog,在Edit的OnClick里写一个事件,即点击打开OpenDialog,如果OpenDialog.Execute=true then,Edit.text=OpenDialog.Filename.点击按钮后,把文件复制到想复制到的文件夹里.代码自己写吧
芜湖市17292562132: 如何在Delphi中使用资源文件 - ?
强任盐酸: 在Delphi中使用资源文件1、在运行处brcc32 *.rc可生成供delphi使用的res文件2、引入res文件 程序代码 implementation {$R *.dfm} {$R Tank.res} procedure TForm1.Button1Click(Sender: TObject); var bmp: TBitmap; begin bmp := TBitmap.Create; ...
芜湖市17292562132: 急!如何在DELPHI编的程序中运行一个文件?
强任盐酸: 传入文件路径就好.
芜湖市17292562132: 如何在Delphi里执行批处理文件 - ?
强任盐酸: 打开记事本 写入多行命令 然后保存为.bat 文件即可 比如这是一个很简单的批处理的原文 copy c:\abc\*.* d:\abc del c:\abc\*.* ren d:\abc\*.jpg *.gif 运行这个批处理文件时 就会将上面三个命令同时执行
芜湖市17292562132: delphi中进行文件操作的函数都有什么??
强任盐酸: 有CopyFile、DeleteFile、MoveFile、ReadFile、WriteFile、CloseFile......如不雅是文件复制、移动、删除,建议用SHFileOperation函数.
芜湖市17292562132: 如何用(Delphi)实现文件的分割合并?(100分送上)?
强任盐酸: 你自己规定一个数据格式就可以了.读取的时候只要打开文件并按照你自己的格式吧数据取出就行了如果你熟悉的,可以使用clientdataset作为数据集控件存取数据,而且可以把数据保存成cds文件
芜湖市17292562132: 如何在Delphi软件中实现对配置文件的加密解密?
强任盐酸: 直接先加密在放到ini 文件里 要用的时候直接解密出来就可以了 至于用什么加密算法看你自己喜欢 推荐用base64算法不错 网上到处有的下
芜湖市17292562132: delphi中如何编辑工程文件 - ?
强任盐酸: 打开工程,然后在菜单中点 Project -> View Source