首页 > 其他分享 >sys.base64.pas

sys.base64.pas

时间:2025-01-09 20:10:57浏览次数:1  
标签:pas end fpc val base64 outStream sys b64Stream endif

sys.base64.pas

unit sys.base64;
//cxg 2025-1-9 fit(delphi+fpc)
interface

uses
  {$ifndef fpc}
  System.NetEncoding,
  {$else}
  base64,
  {$endif}
  SysUtils, Classes;

function base64Encode(const val: string): string; overload;
function base64Encode(const val: TBytes): TBytes; overload;
procedure base64Encode(const input, output: TStream); overload;

function base64Decode(const val: string): string; overload;
function base64Decode(const val: TBytes): TBytes; overload;
procedure base64Decode(input, output: TStream); overload;

implementation

procedure base64Decode(input, output: TStream);
{$ifdef fpc}
var b64Stream: TBase64DecodingStream;
  outStream: TStringStream;
{$endif}
begin
  {$ifndef fpc}
  TNetEncoding.Base64.Decode(input, output);
  {$else}
  outStream := TStringStream.Create('');
  b64Stream := TBase64DecodingStream.Create(outStream);
  try
    b64Stream.CopyFrom(input, input.Size);
  finally
    b64Stream.Free;
  end;
  {$endif}
end;

function base64Decode(const val: TBytes): TBytes;
{$ifdef fpc}
var b64Stream: TBase64DecodingStream;
  outStream: TStringStream;
{$endif}
begin
  {$ifndef fpc}
  Result := TNetEncoding.Base64.Decode(val);
  {$else}
  outStream := TStringStream.Create('');
  b64Stream := TBase64DecodingStream.Create(outStream);
  try
    b64Stream.Write(PByte(val)^, length(val));
    setlength(result, outStream.Size);
    outStream.Read(PByte(result)^, outStream.Size);
  finally
    outStream.Free;
    b64Stream.Free;
  end;
  {$endif}
end;

function base64Decode(const val: string): string;
begin
  {$ifndef fpc}
  Result := TNetEncoding.Base64.Decode(val);
  {$else}
  result := DecodeStringBase64(val);
  {$endif}
end;

function base64Encode(const val: TBytes): TBytes;
  {$ifdef fpc}
var b64Stream: TBase64EncodingStream;
  outStream: TStringStream;
  {$endif}
begin
  {$ifndef fpc}
  Result := TNetEncoding.Base64.Encode(val);
  {$else}
  outStream := TStringStream.Create('');
  b64Stream := TBase64EncodingStream.Create(outStream);
  try
    b64Stream.Write(PByte(val)^, length(val));
    setlength(result, outStream.Size);
    outStream.Read(PByte(result)^, outStream.Size);
  finally
    outStream.Free;
    b64Stream.Free;
  end;
  {$endif}
end;

procedure base64Encode(const input, output: TStream);
{$ifdef fpc}
var b64Stream: TBase64EncodingStream;
outStream: TStringStream;
{$endif}
begin
  {$ifndef fpc}
  TNetEncoding.Base64.Encode(input, output);
  {$else}
  outStream := TStringStream.Create('');
  b64Stream := TBase64EncodingStream.Create(outStream);
  try
    b64Stream.CopyFrom(input, input.Size);
  finally
    b64Stream.Free;
  end;
  {$endif}
end;

function base64Encode(const val: string): string;
begin
  {$ifndef fpc}
  Result := TNetEncoding.Base64.Encode(val);
  {$else}
  result := EncodeStringBase64(val);
  {$endif}
end;

end.

 

标签:pas,end,fpc,val,base64,outStream,sys,b64Stream,endif
From: https://www.cnblogs.com/hnxxcxg/p/18662830

相关文章

  • .net core 在Liunx 使用System.Drawing.Common 出现Gdip问题
    问题:当我们使用画图之类的功能可能会引用System.Drawing.Common,或者间接引用它,由于它是依赖Windows系统,所以我们在Windows是正常的,放在Linux就会出现类似于下面这种错误System.TypeInitializationException:Thetypeinitializerfor'Gdip'threwanexception.--->S......
  • nginx中proxy_pass的斜杠详细说明
    一、proxy_pass后面有/location/api/{proxy_passhttp://localhost:8080/;}location/api/{proxy_passhttp://localhost:8080/xx/;}比如请求http://localhost/api/123.html经过处理后实际请求地址是http://loca......
  • js图片转base64,图片压缩
    上传的文件需要转为base64作为参数提交到接口中,怎么办呢?1.js图片转base64toBase64(file){//转base64letbase64=''constreader=newFileReader();reader.readAsDataURL(file);reader.onload=(e)=>{//转换完成,获取Base64编码......
  • 前端必知必会-Node.js File System模块
    文章目录Node.js文件系统模块Node.js作为文件服务器创建文件更新文件删除文件重命名文件上传文件总结Node.js文件系统模块Node.js作为文件服务器Node.js文件系统模块允许您使用计算机上的文件系统。要包含文件系统模块,请使用require()方法:``jsvarfs=......
  • Sigrity System SI SerialLink模式进行Mipi协议仿真分析操作指导-mipi_m_single_post
    SigritySystemSISerialLink模式进行Mipi协议仿真分析操作指导-mipi_m_single_postSigritySystemSISerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议需要......
  • Sigrity System SI SerialLink模式进行Mipi协议仿真分析操作指导-mipi_m_xt_pre
    SigritySystemSISerialLink模式进行Mipi协议仿真分析操作指导-mipi_m_xt_preSigritySystemSISerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议需要检查......
  • 【Apache Paimon】-- 14 -- Spark 集成 Paimon 之 Filesystem Catalog 与 Hive Catalo
    目录1.背景介绍2.环境准备2.1、技术栈说明2.2、环境依赖2.3、硬件与软件环境2.4、主要工具清单2.5、Maven项目结构2.6、mavenpom.xml依赖3.Spark与Paimon FilesystemCatalog集成3.1、HDFSFileSystemcatalog3.1.1、代码内容3.1.2、运行输出结果3.1.2.......
  • 有限元分析学习——Anasys Workbanch第一阶段笔记(8)水杯案例的对称与轴对称处理
    目录1序言2对称处理2.1模型处理 2.2网格划分、约束载荷及接触设置2.3计算结果3轴对称处理3.1对称与轴对称概念3.2轴对称问题的应用 3.2.1 创建分析案例3.2.2导入并处理模型3.2.3网格划分、约束载荷及接触设置3.2.4后处理计算结果1序言本章主要介......
  • Android A/B system - bootctrl
    Achitecture在AndroidA/BSystem概述中有讲到A升B的一个例子。下面这张图是想说明两个问题:启动的时候是如何知道要从A启动还是B启动?升级的时候是如何要更新A还是B?图中有两个流程,和涉及的一些模块:模块:bootloader:启动的早期阶段,叫preloader/lk都行misc:单独的一块分区,存放......
  • sys.dm_exec_connections:查询与 SQL Server 实例建立的连接有关的信息以及每个连接的
    文章目录引言I基于dm_exec_connections查询客户端ip权限物理联接时间范围dm_exec_connections表seealso:监视SQLServer内存使用量资源信号灯DMVsys.dm_exec_query_resource_semaphores(确定查询执行内存的等待)引言查询历史数据库客户端ip应......