鱼C论坛

 找回密码
 立即注册
查看: 3253|回复: 3

[技术交流] Base64编码算法(纯C)

[复制链接]
发表于 2015-2-27 08:51:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
6.png
Base64编码不难,就是有点麻烦.~~~
自己写的~~大神勿喷1!!!!!

  1. <P> [hide] </P>
  2. <P>#include "stdio.h"
  3. #include "windows.h"
  4. /*
  5.   By:迷 雾 少 年
  6.   QQ:1462063314
  7. */
  8. int  Base_(char *szSting);
  9. int  AsciiToB(char p )
  10. {
  11. int i = 0;</P>
  12. <P> if(p>=0 && p<=25)
  13.   i = 65 + p;
  14. if(p>=26 && p<=51)
  15.   i = 71 + p;
  16. if(p>=52 && p<=61)
  17.   i =  p - 4;</P>
  18. <P> if(p==62) i = '+';
  19. if(p==63) i = '/';
  20. return i;
  21. }</P>
  22. <P>//把3个字符转为Base64格式的字符
  23. int  Base64(char *_Char,char *Resu)
  24. {
  25. int _Data = 0;
  26. int _Int_[4]={0};
  27. //_Data = 5533549;
  28. _Data = Base_(_Char);
  29. //_Data =7929856;
  30. Resu[3] = _Data & 0x3F;
  31. // 0xFC0
  32. Resu[2] = (_Data & 0XFC0) >> 6;
  33. // 0x3F000
  34. Resu[1] = (_Data & 0x3F000) >> 12;
  35. // FC0000
  36. Resu[0] = (_Data & 0xFC0000) >> 18;
  37. //Resu[0] = (_Data & 0x3F000000) >> 24;
  38. /*查表咯*/
  39.    Resu[0] = AsciiToB(Resu[0]);
  40.    Resu[1] = AsciiToB(Resu[1]);
  41.    Resu[2] = AsciiToB(Resu[2]);
  42.    Resu[3] = AsciiToB(Resu[3]);
  43. return 0;
  44. }
  45. int  Base_(char *szSting,int _twp)
  46. {
  47.     int  i = 0;
  48. char *p = (char*)&i;
  49. *p = szSting[2];
  50. p++;
  51. *p = szSting[1];
  52. p++;
  53. *p = szSting[0];
  54. p++;
  55.     *p = szSting[0];
  56. return i;
  57. }
  58. int _Base_(char *In,char *_Out)
  59. {
  60. char Res[5]={0};
  61. int i = 0;
  62. int iz;
  63. char Out[5]={0};
  64. char out[250]={0};
  65.   int lenth = strlen(In);
  66. for (i = 0; i < lenth;)
  67. {
  68.   lstrcpynA(Res,In + i,4);
  69.   Res[4]=0;
  70.   Base64(Res,Out);
  71.   lstrcatA(out,Out);
  72.   i=i+3;
  73.     //还剩余1字节
  74.   if(lenth-i == 2)
  75.   {
  76.    iz = 1;
  77.    
  78.   }
  79.   if(lenth-i == 1)
  80.   {
  81.    iz = 2;
  82.   }
  83. }
  84.   //把A都替换为=
  85.     lenth = strlen(out) - 1;
  86. for (i=0; i < iz; i++)
  87. {
  88.    out[lenth-i] = '=';
  89.   
  90. }
  91.   lstrcpyA(_Out,out);
  92. return 0;
  93. }
  94. int main()
  95. {
  96. char sz_Out_String[200]={0};
  97. char out[280]={0};
  98. printf("请输入要转换的字符C:");
  99. scanf("%s",sz_Out_String);
  100. _Base_(sz_Out_String,out);
  101. printf("\n转换结果%s\n",out);
  102. return 0;
  103. }</P>
  104. <P>[/hide]</P>
复制代码

本帖被以下淘专辑推荐:

  • · 迷雾|主题: 5, 订阅: 1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2015-2-27 10:05:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-27 10:08:22 | 显示全部楼层
学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-27 10:09:59 | 显示全部楼层
额,,,自顶..........
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-7 14:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表