热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实验:Base64开辟空间的估算+数据比对图表绘制

需求:以前对xBuffer进行Base64,都是开xBuffer*2长度的空间,太浪费了. 想通过实验的方法,来确定密文相对于原文的倍数.  1Bytes,16Bytes,256B

需求: 以前对xBuffer进行Base64, 都是开xBuffer *2长度的空间, 太浪费了.

  想通过实验的方法,来确定密文相对于原文的倍数.

 

  1Bytes, 16Bytes, 256Bytes, 512Bytes, 1K, 1M, 10M, 100M, 1G, 这样确定下来.

  画出一张图表,看看是否是线性, 或者有其他精确的定义. 图表直接在程序中画,不手工做了.

 

找到了Base64密文的精确长度公式, 不用挨个去计算了.

size_t B64_length(size_t len) { size_t npad = len%3; size_t size = (npad > 0)? (len + 3 – npad) : len; // padded for multiple of 3 bytes return (size * 8) / 6; }

Base64解码的长度公式

size_t Ascii_length(size_t len) { return (len * 6) / 8; }

两个公式符合Base64编解码的定义.

 

<2011_0227>

用程序把Base64和原文的数据对照画出来了, 不同数据的图表对比,大同小一异.

用到Base64开辟空间的时候,按照公式直接进行开辟。用程序画出数据比对线的意义在于图表绘制本身.

 

《实验: Base64开辟空间的估算 + 数据比对图表绘制》

《实验: Base64开辟空间的估算 + 数据比对图表绘制》

 

《实验: Base64开辟空间的估算 + 数据比对图表绘制》

《实验: Base64开辟空间的估算 + 数据比对图表绘制》

《实验: Base64开辟空间的估算 + 数据比对图表绘制》

《实验: Base64开辟空间的估算 + 数据比对图表绘制》

 

可以看出, Base64之后的输出线有一个4个字节的台阶线, 当原文线性增长时, 密文呈现一条斜率更高的台阶线跟随原文增长.

 

这里我用到了cedric_moonen的CChartCtrl, 总体效果非常棒,在这个画Base6中发现的BUG, 我已经修正. 告知作者后,他还没有更新.

CChartCtrl原版url:

<>

http://www.codeproject.com/KB/miscctrl/High-speedCharting.aspx?msg=3787437#xx3787437xx

 

修改版本下载点:

http://download.csdn.net/source/3047447

/**

<2011_0227_2259>
* 使用了C++版的Base64类,
类本身有接口计算Base64和UnBase64所需开辟空间容量的计算
* 使用了cedric moonen的CChartCtrl(High-speed Charting Control)
修正了此应用中,发现的一些BUG
* 这个CChartCtrl适用于画2D数据图(线状图, 条形图)
非常易于扩展, 可以继承新的轴类,数据类, 用于别的用途
* CChartCtrl修改版的效果在:
http://blog.csdn.net/LostSpeed/archive/2011/02/23/6201645.aspx
* 原版在:
http://www.codeproject.com/KB/miscctrl/High-speedCharting.aspx?msg=3787437#xx3787437xx

开发环境: winxpsp3 + vc6Sp5 + psdkForVc6 + xtreme13.2.1

备注: 如果没有装xtreme, 去掉xtreme相关,编译过可用. 主要看点是那个图表类,用以来还算方便。效果非常棒,非常易于扩转.

*/

 

 


推荐阅读
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 本文深入探讨了C++对象模型中的一些细节问题,特别是虚拟继承和析构函数的处理。通过具体代码示例和详细分析,揭示了书中某些观点的不足之处,并提供了更合理的解释。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 开发笔记:2020 BJDCTF Re encode
    开发笔记:2020 BJDCTF Re encode ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • TechStride 网站
    TechStride 成立于2014年初,致力于互联网前沿技术、产品创意及创业内容的聚合、搜索、学习与展示。我们旨在为互联网从业者提供更高效的新技术搜索、学习、分享和产品推广平台。 ... [详细]
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
author-avatar
手机用户2602905005
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有