`
sunties7
  • 浏览: 9181 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

delphi Pbyte 转化成 base64

阅读更多
转自 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 pbyte 转 base64

    delphi中String,PChar,PByte,Array of Char,Array of Byte 互相转换

    ### Delphi中String,PChar,PByte,Array of Char,Array of Byte 互相转换 在Delphi编程语言中,字符串和其他与字符相关的数据类型之间的转换是常见的需求。本篇文章将详细介绍如何在这些数据类型之间进行转换,...

    Delphi bmp图片转RGB byte方法

    ### Delphi BMP 图片转 RGB Byte 方法解析 #### 核心知识点概述 本文将深入探讨一个在 Delphi 开发环境中使用的函数,该函数用于将 BMP 图像格式转换为 RGB Byte 数组。通过此函数,我们可以方便地处理图像数据,...

    Base64算法源码

    Base64算法基于64个可打印字符,将每3个8位字节的数据块转换成4个6位的字节,然后将这4个6位字节转换成对应的Base64字符,最终形成的结果是可读的文本。 Base64编码的基本原理是将24位的三个字节拆分为4个6位的...

    Delphi 读易语言DLl 读字节集

    易语言是一种简洁明了的中文编程语言,而Delphi则是一款强大的面向对象的 Pascal 编程工具。本话题聚焦于如何在Delphi中调用易语言编写的DLL,并读取其中的字节集,这涉及到跨语言的接口调用和数据类型转换。 首先...

    delphi流相互转换

    从`MemoryStream`转换到`TList&lt;String&gt;`通常涉及读取流中的二进制数据并解析成字符串。这可能涉及到定义一个特定的序列化格式,例如每个字符串前的长度标识。这里有一个基本步骤: 1. 创建一个新的`TList&lt;String&gt;`...

    delphi异或加密解密实例

    Delphi是一种强大的面向对象的编程语言,常用于开发桌面应用程序。在网络安全领域,加密和解密技术是至关重要的,它们确保了数据的安全性和隐私性。本文将深入探讨Delphi中的异或(XOR)加密解密实例,以及如何在...

    delphi 文件读取范例 读取BIN文件(供参考)

    在Delphi编程环境中,文件操作是一项基础且重要的任务。这里我们关注的是如何使用Delphi来读取BIN(二进制)文件。BIN文件通常用于存储程序的机器代码或数据,它们可以直接由计算机执行,或者作为其他软件安装过程的...

    以二进制方式读取图片并显示出来,Delphi源代码.rar

    具体实现可能会涉及低级的内存管理和位图操作,如使用PByte指针直接操作字节流。 在实际应用中,为了提高效率和兼容性,开发人员通常会使用现有的库,如Indy或SuperObject,它们提供了更高级别的接口来处理二进制...

    delphi 图像去噪 去除图片噪点 并将彩色转为纯色(黑色).rar

    在图像处理领域,去噪和颜色转换是两个重要的步骤,特别是在使用编程语言如Delphi进行图像操作时。本文将深入探讨这两个概念,并提供基于Delphi的实现策略。 首先,我们来理解“图像去噪”。图像噪声通常是由于图像...

    Delphi与Windows API数据类型对照表

    ### Delphi与Windows API数据类型对照表解析 #### 引言 在开发基于Windows的应用程序时,经常需要使用Windows API(应用程序编程接口)来完成特定的任务。为了更好地将Delphi与Windows API结合使用,理解两者间的...

    Delphi获取图片像素..rar

    在Delphi编程环境中,获取图片像素是常见的图像处理任务,特别是在进行图像分析、图像处理或者图形用户界面(GUI)设计时。本篇文章将深入探讨如何使用Delphi来获取图像的像素信息。 首先,我们需要理解Delphi中...

    Mirro For Delphi7

    Mirro For Delphi7&quot; 是一个速度极快的抓取屏幕数据的单元.它的速度与 &quot;Remote Administrator&quot;(www.radmin.com)不相上下.可以运行于所有基于Windows NT核心的操作系统上(Windows NT/Windows 2000/...

    CRC.rar_DELPHI crc32_crc delphi_crc32 delp_delphi c_delphi crc

    Buffer: PByte; Poly: Cardinal; begin Result := $FFFFFFFF; // 初始化CRC Poly := $04C11DB7; // 定义CRC32多项式 Buffer := Data; while Size &gt; 0 do begin Result := (Result shr 8) xor PolyTable[...

    Delphi版MD5算法

    它能将任意长度的数据转化为一个固定长度的摘要,通常是32位的十六进制字符串。在Delphi编程环境中,实现MD5算法可以用于数据完整性校验、密码存储等方面。 Delphi是一种基于Object Pascal语言的集成开发环境(IDE...

    DELPHI异或加密与解密

    DELPHI异或加密与解密是编程领域中一种基础但有效的数据保护手段,尤其在初学者阶段,这种技术能够帮助理解加密的基本原理。本文将深入探讨DELPHI中的异或加密算法及其应用。 首先,我们需要了解什么是异或(XOR)...

    psflash_delphi_

    可以使用PChar或PByte类型指针来访问像素数据。 2. **分块处理**:将图片的宽度分成若干个块,每个块代表一行或多行。块的大小可以根据实际效果调整。 3. **动画循环**:在TTimer的OnTimer事件处理函数中,执行...

    SHORT CODE INJEK AXIS DELPHI 7_short_BasicInjek_源码

    在Delphi中,开发者可能会使用TMemoryStream、AnsiString等类来处理内存中的数据,或者使用PChar、PByte等指针类型来直接访问内存。 【压缩包子文件的文件名称列表】"SHORT CODE INJEK AXIS DELPHI 7" 暗示压缩包内...

    Delphi7 CRC16检验码计算

    总的来说,"Delphi7 CRC16检验码计算"涉及到的是在Delphi7环境下利用位操作实现CRC16校验码的计算,并封装成一个便于使用的程序。开发者可以学习这段源码,理解CRC16算法,以便在自己的项目中应用或优化。

Global site tag (gtag.js) - Google Analytics