转自 https://searchcode.com/codesearch/view/5602527/
unit Base64;
interface
uses windows;
{ Base64 encode and decode a string }
function Base64Encode(src:pByte;len:integer):PAnsiChar;
function Base64Decode(src:PAnsiChar;var dst:pByte):integer;
{******************************************************************************}
{******************************************************************************}
implementation
const
base64chars{:array [0..63] of AnsiChar}:PAnsiChar =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
function Base64Encode(src:pByte;len:integer):PAnsiChar;
var
dst:PAnsiChar;
begin
if (src=nil) or (len<=0) then
begin
result:=nil;
exit;
end;
GetMem(result,((len*4+11) div (12*4))+1);
dst:=result;
while len>0 do
begin
dst^:=base64chars[src^ shr 2]; inc(dst);
if len=1 then
begin
dst^:=base64chars[(src^ and 3) shl 4]; inc(dst);
dst^:='='; inc(dst);
dst^:='='; inc(dst);
break;
end;
dst^:=base64chars[((src^ and 3) shl 4) or (pbyte(PAnsiChar(src)+1)^ shr 4)]; inc(dst); inc(src);
if len=2 then
begin
dst^:=base64chars[(src^ and $F) shl 2]; inc(dst);
dst^:='='; inc(dst);
break;
end;
dst^:=base64chars[((src^ and $F) shl 2) or (pbyte(PAnsiChar(src)+1)^ shr 6)]; inc(dst); inc(src);
dst^:=base64chars[src^ and $3F]; inc(dst); inc(src);
dec(len,3);
end;
dst^:=#0;
end;
function Base64CharToInt(c:AnsiChar):byte;
begin
case c of
'A'..'Z': result:=ord(c)-ord('A');
'a'..'z': result:=ord(c)-ord('a')+26;
'0'..'9': result:=ord(c)-ord('0')+52;
'+': result:=62;
'/': result:=63;
'=': result:=64;
else
result:=255;
end;
end;
function Base64Decode(src:PAnsiChar;var dst:pByte):integer;
var
slen:integer;
ptr:pByte;
b1,b2,b3,b4:byte;
begin
if (src=nil) or (src^=#0) then
begin
result:=0;
dst:=nil;
exit;
end;
pAnsiChar(ptr):=src;
while ptr^<>0 do inc(ptr);
slen:=PAnsiChar(ptr)-src;
GetMem(ptr,(slen*3) div 4);
dst:=ptr;
result:=0;
while slen>0 do
begin
b1:=Base64CharToInt(src^); inc(src);
b2:=Base64CharToInt(src^); inc(src);
b3:=Base64CharToInt(src^); inc(src);
b4:=Base64CharToInt(src^); inc(src);
dec(slen,4);
if (b1=255) or (b1=64) or (b2=255) or (b2=64) or (b3=255) or (b4=255) then
break;
ptr^:=(b1 shl 2) or (b2 shr 4); inc(ptr); inc(result);
if b3=64 then
break;
ptr^:=(b2 shl 4) or (b3 shr 2); inc(ptr); inc(result);
if b4=64 then
break;
ptr^:=b4 or (b3 shl 6); inc(ptr); inc(result);
end;
end;
end.
分享到:
相关推荐
delphi pbyte 转 base64
### Delphi中String,PChar,PByte,Array of Char,Array of Byte 互相转换 在Delphi编程语言中,字符串和其他与字符相关的数据类型之间的转换是常见的需求。本篇文章将详细介绍如何在这些数据类型之间进行转换,...
### Delphi BMP 图片转 RGB Byte 方法解析 #### 核心知识点概述 本文将深入探讨一个在 Delphi 开发环境中使用的函数,该函数用于将 BMP 图像格式转换为 RGB Byte 数组。通过此函数,我们可以方便地处理图像数据,...
Base64算法基于64个可打印字符,将每3个8位字节的数据块转换成4个6位的字节,然后将这4个6位字节转换成对应的Base64字符,最终形成的结果是可读的文本。 Base64编码的基本原理是将24位的三个字节拆分为4个6位的...
易语言是一种简洁明了的中文编程语言,而Delphi则是一款强大的面向对象的 Pascal 编程工具。本话题聚焦于如何在Delphi中调用易语言编写的DLL,并读取其中的字节集,这涉及到跨语言的接口调用和数据类型转换。 首先...
从`MemoryStream`转换到`TList<String>`通常涉及读取流中的二进制数据并解析成字符串。这可能涉及到定义一个特定的序列化格式,例如每个字符串前的长度标识。这里有一个基本步骤: 1. 创建一个新的`TList<String>`...
总的来说,"Delphi7 CRC16检验码计算"涉及到的是在Delphi7环境下利用位操作实现CRC16校验码的计算,并封装成一个便于使用的程序。开发者可以学习这段源码,理解CRC16算法,以便在自己的项目中应用或优化。
Delphi是一种强大的面向对象的编程语言,常用于开发桌面应用程序。在网络安全领域,加密和解密技术是至关重要的,它们确保了数据的安全性和隐私性。本文将深入探讨Delphi中的异或(XOR)加密解密实例,以及如何在...
在Delphi编程环境中,文件操作是一项基础且重要的任务。这里我们关注的是如何使用Delphi来读取BIN(二进制)文件。BIN文件通常用于存储程序的机器代码或数据,它们可以直接由计算机执行,或者作为其他软件安装过程的...
具体实现可能会涉及低级的内存管理和位图操作,如使用PByte指针直接操作字节流。 在实际应用中,为了提高效率和兼容性,开发人员通常会使用现有的库,如Indy或SuperObject,它们提供了更高级别的接口来处理二进制...
在图像处理领域,去噪和颜色转换是两个重要的步骤,特别是在使用编程语言如Delphi进行图像操作时。本文将深入探讨这两个概念,并提供基于Delphi的实现策略。 首先,我们来理解“图像去噪”。图像噪声通常是由于图像...
### Delphi与Windows API数据类型对照表解析 #### 引言 在开发基于Windows的应用程序时,经常需要使用Windows API(应用程序编程接口)来完成特定的任务。为了更好地将Delphi与Windows API结合使用,理解两者间的...
在Delphi编程环境中,获取图片像素是常见的图像处理任务,特别是在进行图像分析、图像处理或者图形用户界面(GUI)设计时。本篇文章将深入探讨如何使用Delphi来获取图像的像素信息。 首先,我们需要理解Delphi中...
在Delphi中实现这个功能,主要涉及到Windows API的使用,特别是与进程和线程操作相关的函数。本文将详细介绍如何用Delphi实现远程注入DLL。 首先,提升进程权限是非常重要的一步,因为我们需要访问目标进程的内存...
Mirro For Delphi7" 是一个速度极快的抓取屏幕数据的单元.它的速度与 "Remote Administrator"(www.radmin.com)不相上下.可以运行于所有基于Windows NT核心的操作系统上(Windows NT/Windows 2000/...
Buffer: PByte; Poly: Cardinal; begin Result := $FFFFFFFF; // 初始化CRC Poly := $04C11DB7; // 定义CRC32多项式 Buffer := Data; while Size > 0 do begin Result := (Result shr 8) xor PolyTable[...
它能将任意长度的数据转化为一个固定长度的摘要,通常是32位的十六进制字符串。在Delphi编程环境中,实现MD5算法可以用于数据完整性校验、密码存储等方面。 Delphi是一种基于Object Pascal语言的集成开发环境(IDE...
DELPHI异或加密与解密是编程领域中一种基础但有效的数据保护手段,尤其在初学者阶段,这种技术能够帮助理解加密的基本原理。本文将深入探讨DELPHI中的异或加密算法及其应用。 首先,我们需要了解什么是异或(XOR)...
可以使用PChar或PByte类型指针来访问像素数据。 2. **分块处理**:将图片的宽度分成若干个块,每个块代表一行或多行。块的大小可以根据实际效果调整。 3. **动画循环**:在TTimer的OnTimer事件处理函数中,执行...
在Delphi中,开发者可能会使用TMemoryStream、AnsiString等类来处理内存中的数据,或者使用PChar、PByte等指针类型来直接访问内存。 【压缩包子文件的文件名称列表】"SHORT CODE INJEK AXIS DELPHI 7" 暗示压缩包内...