热门标签 | 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相关,编译过可用. 主要看点是那个图表类,用以来还算方便。效果非常棒,非常易于扩转.

*/

 

 


推荐阅读
  • 转自:http:www.phpweblog.netfuyongjiearchive200903116374.html一直对字符的各种编码方式懵懵懂懂,什 ... [详细]
  • c语言 怎么访问64位地址_C语言调动硬件的原理是什么?
    大家都知道我们可以使用C语言写一段程序来控制硬件工作,但你知道其工作原理吗?1c语言在实际运行中,都是以汇编指令的方式运行的,由编译器把C ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 深入理解计算机系统之链接(一)
    程序是怎样运行的写好的c程序怎样运行的呢?答案是一个写好的程序要先经过语言预处理器,编译器,汇编器和链接器生成最后的可执行文件,然后加载器将可执行文件加载到内存中才能运行。这里以一 ... [详细]
  • LINUX运行谷歌TTS,中文TTS 的简单实现(基于linux)之 语音库的实现
    语音库保存着常用汉字的发音(多音的汉字只记录其一种发音,这也是本系统的一个缺陷,需要以后完善),所以先要得到一汉字集,这个汉 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • Python中sys模块的功能及用法详解
    本文详细介绍了Python中sys模块的功能及用法,包括对解释器参数和功能的访问、命令行参数列表、字节顺序指示符、编译模块名称等。同时还介绍了sys模块中的新功能和call_tracing函数的用法。推荐学习《Python教程》以深入了解。 ... [详细]
  • 使用C++编写程序实现增加或删除桌面的右键列表项
    本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ... [详细]
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社区 版权所有