转自 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 之间的互相转换
提供了一个Function,是在项目中用到的BMP图片转BGR BYTE的方法.
MemoryStream与liststring与stringstream转换
Mirro For Delphi7" 是一个速度极快的抓取屏幕数据的单元.它的速度与 "Remote Administrator"(www.radmin.com)不相上下.可以运行于所有基于Windows NT核心的操作系统上(Windows NT/Windows 2000/...
type TBigByteArray = array [0 .. MaxInt - 1] of byte; TBytes = TBigByteArray; PBigByteArray = ^TBigByteArray; var ...copymemory (binstream2.Memory,(pbyte(Text))[0]), len); //xxxxxxxx
BOOL detour_insert_detour( PBYTE pbTarget, PBYTE pbTrampoline, PBYTE pbDetour); ////////////////////////////////////// // pbCode: 修改目标指令 // // pbDest: 目标跳转指令 // // cbCode: 要修改的字节...
这是一个将图像数据保存为bmp文件的实例程序,很适合初学者,经过调试,代码完全可用
delphi编写的串口软件procedure EnumComPorts(Ports: TStrings); var KeyHandle: HKEY; ErrCode, Index: Integer; ValueName, Data: string; ValueLen, DataLen, ValueType: DWORD; TmpPorts: TStringList; ...
pbUserKey : PBYTE);stdcall;external 'seedx.dll';procedure SeedEncrypt( pbData : PBYTE; pdwRoundKey : PDWORD );stdcall;external 'seedx.dll';procedure SeedDecrypt( pbData : PBYTE; pdwRoundKey : PDWORD ...
FloatString(f64 src, i8* desString, ui8 mplace);BStringToUchar(ui8 src[],ui8* destData);SubString(ui8* srcString,ui8* desString, ui8 startPos, ui8 size_n);等,还包含常用的位操作函数,如:ui8 GetBits...
// Find Password from winlogon in win2000 / winnt4 + // // PasswordReminder.cpp --> 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)...
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文件的函数 DWORD GetPrivateProfileString( ... PBYTE pFileBuf; CString szBuf; DWORD dwLength; if (lpFileName == NULL || lpReturnedString == NULL) return 0;
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 ...
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)...
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 != ...