编码转换工具_PDF在线转换工具

编码转换工具_PDF在线转换工具核心代码:1voidEncodeBase64(unsignedchar*ce,unsignedchar*co)2{3unsignedchar*p;4unsignedi

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

编码转换工具_PDF在线转换工具

核心代码:

 1 void EncodeBase64(unsigned char *ce, unsigned char *co)  2 {  3 unsigned char *p;  4 unsigned int ocl; // 原串长度  5 unsigned int ecl; // 加密后长度  6 unsigned int t; // ocl 除以 3 后的余数  7 unsigned char *oend;  8 unsigned char *eend;  9 unsigned char *p1, *p2, *p3;  10 unsigned char *pe;  11 unsigned char Base64Table[68] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";  12  13 for (p = co, ocl = 0; *p; ++p)  14  {  15 ++ocl;  16  }  17  18 ecl = ocl / 3 * 4; // 不用补0的部分  19 t = ocl % 3;  20 if (t)  21 ecl += 4; // 末尾4字节  22  23 oend = co + ocl;  24 eend = ce + ecl;  25 *eend = '\0';  26  27 p1 = co;  28 p2 = co + 1;  29 p3 = co + 2;  30 pe = ce;  31 while (p3 < oend) // 不用补0的部分  32  {  33 *pe++ = *p1 >> 2;  34 *pe++ = (*p1 & 0x03) << 4 | *p2 >> 4;  35 *pe++ = (*p2 & 0x0F) << 2 | *p3 >> 6;  36 *pe++ = *p3 & 0x3F;  37  38 p1 += 3;  39 p2 += 3;  40 p3 += 3;  41  }  42  43  44 /*  45  末尾4字节  46  t = 1:  47  [1101 0101]  48  00[110101] 00[010000] 40H pad 40H pad  49  35H 10H 40H pad 40H pad  50  31H '1' 51H 'Q' 3DH '=' 3DH '='  51  52  t = 2:  53  [1101 0101] [1100 0101]  54  00[110101] 00[011100] 00[010100] 40H pad  55  35H 1CH 14H 40H pad  56  31H '1' 62H 'c' 55H 'U' 3DH '='  57 */  58 switch (t)  59  {  60 case 1:  61 *pe++ = *p1 >> 2;  62 *pe++ = (*p1 & 0x03) << 4;  63 *pe++ = 0x40;  64 *pe = 0x40;  65 break;  66  67 case 2:  68 *pe++ = *p1 >> 2;  69 *pe++ = (*p1 & 0x03) << 4 | *p2 >> 4;  70 *pe++ = (*p2 & 0x0F) << 2;  71 *pe = 0x40;  72 break;  73  74 default:  75 break;  76  }  77  78 // 已创建好索引值,开始转换  79  80 /*  81  Base 64 加密索引表  82  一一对应关系,解密就是反过来  83  84  000 ~ 025 026 ~ 051 052 ~ 061 062 063 064  85  00H ~ 19H 1AH ~ 33H 34H ~ 3DH 3EH 3FH 40H  86  ↓ ↓ ↓ ↓ ↓ ↓  87  41H ~ 5AH 61H ~ 7AH 30H ~ 39H 2BH 2FH 3DH  88  'A' ~ 'Z' 'a' ~ 'z' '0' ~ '9' '+' '/' '='  89  90  for (p = ce; p < eend; ++p)  91  {  92  if (*p <= 0x19)  93  *p += 0x41;  94  else if (*p >= 0x1A && *p <= 0x33)  95  *p += 0x61 - 0x1A;  96  else if (*p >= 0x34 && *p <= 0x3D)  97  *p -= 0x04;  98  else if (*p == 0x3E)  99  *p = 0x2B; // '+' 100  else if (*p == 0x3F) 101  *p = 0x2F; // '/' 102  else if (*p == 0x40) 103  *p = 0x3D; // '=' 104  } 105 */ 106 /* 107  查表法使用额外空间,减少代码长度,不再需要if判断分支 108 */ 109 for (p = ce; p < eend; ++p) 110  { 111 *p = Base64Table[*p]; 112  } 113 } 114 void DecodeBase64(unsigned char *co, unsigned char *ce) 115 { 116 unsigned char *p; 117 unsigned int ocl; // 原串长度 118 unsigned int ecl; // 加密串长度 119 unsigned int t; // '='个数 120 121 unsigned char *oend; 122 unsigned char *eend; 123 unsigned char *eendf; // 加密串中每4个字节计算,不含'='的部分的末尾 124 unsigned char *p1, *p2, *p3, *p4; 125 unsigned char *po; 126 127 for (p = ce, ecl = 0; *p; ++p) 128  { 129 ++ecl; 130  } 131 132 eendf = eend = ce + ecl; 133 for (t = 0, p = eend - 1; *p == '='; --p) 134  { 135 ++t; 136  } 137 138 if (t) 139 eendf -= 4; 140 141 ocl = ecl / 4 * 3 - t; // 合法加密串长度总是4的倍数,函数不做合法性检查 142 oend = co + ocl; 143 *oend = '\0'; 144 145 /* 146  还原为索引 147 148  41H ~ 5AH 61H ~ 7AH 30H ~ 39H 2BH 2FH 3DH 149  'A' ~ 'Z' 'a' ~ 'z' '0' ~ '9' '+' '/' '=' 150  ↓ ↓ ↓ ↓ ↓ ↓ 151  00H ~ 19H 1AH ~ 33H 34H ~ 3DH 3EH 3FH 40H 152 */ 153 for (p = ce; p < eend; ++p) 154  { 155 if (*p >= 'A' && *p <= 'Z') 156 *p -= 0x41; 157 else if (*p >= 'a' && *p <= 'z') 158 *p -= 0x61 - 0x1A; 159 else if (*p >= '0' && *p <= '9') 160 *p += 0x04; 161 else if (*p == '+') 162 *p = 0x3E; 163 else if (*p == '/') 164 *p = 0x3F; 165 else if (*p == '=') 166 *p = 0x40; 167  } 168 169 // 合并字节 170 p1 = ce; 171 p2 = ce + 1; 172 p3 = ce + 2; 173 p4 = ce + 3; 174 po = co; 175 while (p1 < eendf) 176  { 177 *po++ = *p1 << 2 | *p2 >> 4; 178 *po++ = *p2 << 4 | *p3 >> 2; 179 *po++ = *p3 << 6 | *p4; 180 181 p1 += 4; 182 p2 += 4; 183 p3 += 4; 184 p4 += 4; 185  } 186 /* 187  while (p1 < eendf) 188  { 189  *po++ = *p1 << 2 | (*p2 & 0x30) >> 4; 190  *po++ = *p2 << 4 | (*p3 & 0x3C) >> 2; 191  *po++ = *p3 << 6 | *p4 & 0x3F; 192 193  p1 += 4; 194  p2 += 4; 195  p3 += 4; 196  p4 += 4; 197  } 198 */ 199 /* 200  末尾4字节 201 202  t = 1: 203  31H '1' 62H 'c' 55H 'U' 3DH '=' 204  35H 1CH 14H 40H pad 205  00[110101] 00[011100] 00[010100] 40H pad 206  [1101 0101] [1100 0101] 207 208  t = 2: 209  31H '1' 51H 'Q' 3DH '=' 3DH '=' 210  35H 10H 40H pad 40H pad 211  00[110101] 00[010000] 40H pad 40H pad 212  [1101 0101] 213 */ 214 switch (t) 215  { 216 case 1: 217 *po++ = *p1 << 2 | *p2 >> 4; 218 *po = *p2 << 4 | *p3 >> 2; 219 break; 220 221 case 2: 222 *po = *p1 << 2 | *p2 >> 4; 223 break; 224 225 default: 226 break; 227  } 228 } 229 int DecodeBase64_safe(unsigned char *co, unsigned char *ce) 230 { 231 if (!IsBase64String(ce)) 232 return 0; 233 else 234  { 235  DecodeBase64(co, ce); 236 return 1; 237  } 238 }

完整源码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166444.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Qt 垂直布局 (QVBoxLayout)

    Qt 垂直布局 (QVBoxLayout)Qt垂直布局(QVBoxLayout)上一节说了水平布局:https://blog.csdn.net/weixin_42837024/article/details/82114258QVBoxLayout:在垂直的方向上排列控件上下排列QVBoxLayout*pLayout=newQVBoxLayout();//水平布局QPushButton*p…

  • vue关闭eslint检查_vue 校验规则 提取

    vue关闭eslint检查_vue 校验规则 提取在创建项目时,手贱点击了yes。那么怎样关闭Eslint验证呢?1.打开build\webpack.base.conf.js2.找到如下代码,并ctrl点击红框框起的代码3.修改useEslint:true,为false4.最后,在修改完配置文件之后,在终端输入nmprundev。这一点非常重要,我就是没有漏了这步操作,弄了很久。…

  • 以太坊私有链搭建_以太坊节点减少

    以太坊私有链搭建_以太坊节点减少网上关于如何搭建私链的文章很多,但是看来看去都是一样的,千篇一律,想找点不一样,新鲜的知识很难,本文总结归纳那些文章的内容,从使用私链的角度出发写了一篇比较全面的博客,内容包含以下几点:windows单节点 windows多节点 linux创建节点并,windows远程使用linux节点 linux节点和Windows节点建立连接(网络原因,提供思路)1.windows单节…

  • phpstudy nginx配置_phpstorm配置php环境

    phpstudy nginx配置_phpstorm配置php环境前言:首先来了解一下nginx工作原理:https://blog.csdn.net/hguisu/article/details/8930668一.nginx实现php动态解析原理nginx是一个高性能的http服务器和反向代理服务器。即nginx可以作为一个HTTP服务器进行网站的发布处理,也可以作为一个反向代理服务器进行负载均衡。但需要注意的是:nginx本身并不会对php文…

  • kali安装步骤失败 选择并安装软件_kali怎么装arpspoof

    kali安装步骤失败 选择并安装软件_kali怎么装arpspoof1.在我刚刚安装好kali系统后,使用arpspoof命令显示无此命令这时需要安装,于是百度下来的结果:apt-getinstalldsniffssldump2.但是会出现:“E:无法定位软件包问题”于是百度上大佬的解决办法是:更新:source.list文件中是有关Ubuntu软件更新的源服务器的地址,默认为Ubuntu官方地址,为提高速度我们可以修改为其他服务器地址cd/e…

  • intellij 插件_idea中文插件

    intellij 插件_idea中文插件下载安装MyBatisCodeHelperPro插件下载地址:MyBatisCodeHelperPro使用

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号