既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
sample 代码行为:
- 读取图片
- 编码图片
- 打印编码后base64编码字符串
- 解码字符串
- 写入文件验证
测试可修改图片路径既可。
编解码code来自:
https://blog.csdn.net/jingda3100/article/details/78296740
本文仅为方便以后使用,收集记录。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
// bindata待编码数据buffer base64 编码后数据buffer binlength 待编码数据大小
char \*base64\_encode( const unsigned char \* bindata, char \* base64, int binlength);
// base64编码字符串 bindata 解码后buffer
int base64\_decode( const char \* base64, unsigned char \* bindata);
int main()
{
FILE \*fp = NULL;
unsigned int imageSize; //图片字节数
char \*imageBin;
char \*imageBase64;
char \*imageOutput;
size_t result;
char \*ret;
unsigned int base64StrLength;
fp = fopen("test.jpg","rb"); //待编码图片
if (NULL == fp)
{
printf("file open file");
return -1;
}
//获取图片大小
fseek(fp, 0L, SEEK\_END);
imageSize = ftell(fp);
fseek(fp, 0L, SEEK\_SET);
//分配内存存储整个图片
imageBin = (char \*)malloc(sizeof(char)\*imageSize);
if (NULL == imageBin)
{
printf("malloc failed");
return -1;
}
//读取图片
result = fread(imageBin, 1, imageSize, fp);
if (result != imageSize)
{
printf("file read failed");
return -1;
}
fclose(fp);
//分配编码后图片所在buffer
imageBase64 = (char \*)malloc(sizeof(char)\*imageSize\*2);//因为编码一版会比源数据大1/3的样子,这里直接申请源文件一倍的空间
if (NULL == imageBase64)
{
printf("malloc failed");
return -1;
}
//base64编码
base64\_encode(imageBin, imageBase64, imageSize);
base64StrLength = strlen(imageBase64);
printf("base64 str length:%d\n", base64StrLength);
printf("%s\n", imageBase64);
//分配存储解码数据buffer
imageOutput = (char \*)malloc(sizeof(char)\*imageSize);//解码后应该和源图片大小一致
if (NULL == imageBase64)
{
printf("malloc failed");
return -1;
}
base64\_decode(imageBase64, imageOutput);
fp = fopen("output.jpg","wb");
if (NULL == fp)
{
printf("file open file");
return -1;
}
fwrite(imageOutput, 1, imageSize, fp);
fclose(fp);
free(imageBin);
free(imageBase64);
free(imageOutput);
return 0;
}
const char \* base64char = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
char \*base64\_encode( const unsigned char \* bindata, char \* base64, int binlength )
{
int i, j;
unsigned char current;
for ( i = 0, j = 0 ; i < binlength ; i += 3 )
{
current = (bindata[i] >> 2) ;
current &= (unsigned char)0x3F;
base64[j++] = base64char[(int)current];
current = ( (unsigned char)(bindata[i] << 4 ) ) & ( (unsigned char)0x30 ) ;
if ( i + 1 >= binlength )
{
![img](https://img-blog.csdnimg.cn/img_convert/d2466922e5ddb8030e3631b7933fe828.png)
![img](https://img-blog.csdnimg.cn/img_convert/8d8099ccdfdf4103bd6b96071a19146d.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**