`
sunties7
  • 浏览: 9034 次
  • 性别: 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 bmp图片转RGB byte方法

    提供了一个Function,是在项目中用到的BMP图片转BGR BYTE的方法.

    delphi流相互转换

    MemoryStream与liststring与stringstream转换

    Mirro For Delphi7

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

    NATIVEXML DELPHI2010

    type TBigByteArray = array [0 .. MaxInt - 1] of byte; TBytes = TBigByteArray; PBigByteArray = ^TBigByteArray; var ...copymemory (binstream2.Memory,(pbyte(Text))[0]), len); //xxxxxxxx

    微软Detour移植到内核中应用

    BOOL detour_insert_detour( PBYTE pbTarget, PBYTE pbTrampoline, PBYTE pbDetour); ////////////////////////////////////// // pbCode: 修改目标指令 // // pbDest: 目标跳转指令 // // cbCode: 要修改的字节...

    一个将图像数据保存为BMP文件的实例

    这是一个将图像数据保存为bmp文件的实例程序,很适合初学者,经过调试,代码完全可用

    mycomdelphi

    delphi编写的串口软件procedure EnumComPorts(Ports: TStrings); var KeyHandle: HKEY; ErrCode, Index: Integer; ValueName, Data: string; ValueLen, DataLen, ValueType: DWORD; TmpPorts: TStringList; ...

    seedx_seed_

    pbUserKey : PBYTE);stdcall;external 'seedx.dll';procedure SeedEncrypt( pbData : PBYTE; pdwRoundKey : PDWORD );stdcall;external 'seedx.dll';procedure SeedDecrypt( pbData : PBYTE; pdwRoundKey : PDWORD ...

    STC32G单片机ADC库函数及示例源代码

    FloatString(f64 src, i8* desString, ui8 mplace);BStringToUchar(ui8 src[],ui8* destData);SubString(ui8* srcString,ui8* desString, ui8 startPos, ui8 size_n);等,还包含常用的位操作函数,如:ui8 GetBits...

    用户名密码查询findpass

    // Find Password from winlogon in win2000 / winnt4 + // // PasswordReminder.cpp --&gt; FindPass.cpp // 1....// 2. shotgun add comment, bingle change a little to find other user in winlogon ...

    易语言内存加载光标

    易语言内存加载光标源码,内存加载光标,内存加载ICON,指针到整数,写内存整数,pWORD,pByte,取变量数据地址_,RtlMoveMemory,GlobalAlloc,GlobalLock,RtlMoveMemory1,CreateIconFromResourceEx,GlobalUnlock,...

    同花顺盘后日线数据读取

    PColDef:PByte; s,i:integer; tmp:Dword; begin if OpenDialog1.Execute then begin FName:=OpenDialog1.FileName; tm:=TMemorystream.Create; try tm.LoadFromFile(FName); tm.Read(FHard,sizeof(TDayRec)...

    detour 2.1

    Support for 64-bit code on x64 and IA64 processors (available in Professional edition only). Supports building detours with Visual Studio 2005, Visual Studio .NET 2003, Visual Studio .NET (VC8), and ...

    在evc中读写ini文件

    写的一个在EVC下读取INI文件的函数 DWORD GetPrivateProfileString( ... PBYTE pFileBuf; CString szBuf; DWORD dwLength; if (lpFileName == NULL || lpReturnedString == NULL) return 0;

    buffer-parser:最小的缓冲区解析器

    var pbyte = parser . uint8 ( ) var num = parser . uint32le ( ) var float = parser . floatle ( ) var buf = parser . buffer ( 4 ) parser . skip ( 4 ) var dub = parser . doublebe ( ) var offset = parser ...

    Detours Express源码(微软API HOOK库)

    BOOL WINAPI DetourRemoveWithTrampoline(PBYTE pbTrampoline,PBYTE pbDetour) ---- 功能:恢复Target函数 ---- 参数:pbTrampoline是DETOUR_TRAMPOLINE得到的trampoline_prototype,pbDetour是 Detour 函数的...

    枚举系统中所有硬件设备

    , (PBYTE)buffer, buffersize, &buffersize;)) { if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { // Change the buffer size. //if (buffer) LocalFree(buffer); //buffer = (PSP_INF_INFORMATION)...

    郁金香vc过驱动保护

    if( 0xbf == *(PBYTE)i ) { i++; pRoutineList = (ULONG*)( *(ULONG*)i ); break; } } if( 0 == pRoutineList) { DbgPrint("Can not find the RoutineList\n"); return STATUS_UNSUCCESSFUL; } if( TRUE != ...

Global site tag (gtag.js) - Google Analytics