zlib demo

zlib简介

zlib是一个开源的数据压缩库,用于在应用程序中进行数据的压缩和解压缩操作。它提供了一组函数和数据结构,可以实现广泛的压缩算法,其中最常用的是Deflate算法。zlib库的设计简单、高效,并且具有广泛的应用领域。

压缩(compress)

#define SRCPATH      "0:/system/image/"
#define COMPRPATH    "0:/system/com/"
#define UNCOMPRPATH  "0:/system/ucom/"
void compress_file(void)
{printf("%s, %d, start !\r\n", __func__, __LINE__);uint8_t *src_buf = NULL, *compr_buf = NULL;int compr_file_len = 0,src_file_len = 0;DIR dir;uint8_t *filename = NULL;FILINFO *fileinfo = NULL;FIL fpsrc, fpcompr;FRESULT res;uint32_t bw;int err = 0;filename = WOKOO_MALLOC(32*sizeof(uint8_t));if (filename == NULL){printf("malloc filename error \r\n");goto err_name;}fileinfo = (FILINFO*)WOKOO_MALLOC(sizeof(FILINFO));if (NULL == fileinfo) {goto err_finfo;}res = f_opendir(&dir, SRCPATH);if (res == FR_OK){while (1){/* Reads a file in the directory*/res = f_readdir(&dir, fileinfo);if (res != FR_OK || fileinfo->fname[0] == 0){/* Error/reached the end, exit */break;}res = exfuns_file_type(fileinfo->fname);/* Pick up four digits to see if it is a music file */if ((res & 0xF0) == 0x00){strcpy((uint8_t*)filename,SRCPATH);/* Follow the file name*/strcat((uint8_t*)filename,(const uint8_t*)fileinfo->fname);printf("filename = %s\r\n",filename);res = f_open(&fpsrc, (uint8_t *)filename, FA_OPEN_EXISTING | FA_READ);if (res == 0){src_file_len = f_size(&fpsrc);printf("src_file_len = %d \r\n", src_file_len);printf("src_file_len = 0x%x \r\n", src_file_len);src_buf = (uint8_t *)WOKOO_MALLOC(src_file_len * sizeof(uint8_t));if (src_buf == NULL) {printf("malloc %s buf error !\r\n", filename);continue;}res = f_read(&fpsrc, src_buf, src_file_len, &bw);if (res != FR_OK) {printf("read %s error !\r\n", filename);continue;}f_close(&fpsrc);}compr_file_len = compressBound(src_file_len);printf("compr_file_len = %d \r\n", compr_file_len);compr_buf = (uint8_t *)WOKOO_MALLOC(compr_file_len * sizeof(uint8_t));if (compr_buf == NULL) {printf("malloc compr buf error \r\n");continue;}err = compress(compr_buf, &compr_file_len, src_buf, src_file_len);if(err != Z_OK){printf("compress failed!\n");continue ;}printf("0x%x 0x%x 0x%x 0x%x 0x%x \r\n", compr_buf[compr_file_len -4], compr_buf[compr_file_len - 3], compr_buf[compr_file_len -2],compr_buf[compr_file_len - 1], compr_buf[compr_file_len]);strcpy((uint8_t*)filename,COMPRPATH);/* Follow the file name*/strcat((uint8_t*)filename,(const uint8_t*)fileinfo->fname);res = f_open(&fpcompr, filename, FA_CREATE_ALWAYS | FA_WRITE);if (res == FR_OK) {res = f_write(&fpcompr, compr_buf, compr_file_len, &bw);if(res != FR_OK) {printf("read image src error \r\n");}f_close(&fpcompr);}if (compr_buf != NULL) {WOKOO_FREE(compr_buf);compr_buf = NULL;}if (src_buf != NULL) {WOKOO_FREE(src_buf);src_buf = NULL;}}}f_closedir(&dir);}err_finfo:if (fileinfo != NULL) {WOKOO_FREE(fileinfo);fileinfo = NULL;}
err_name:if (filename != NULL) {WOKOO_FREE(filename);filename = NULL;}return;printf("%s, %d, end !\r\n", __func__, __LINE__);
}

解压(uncompress)

void uncompress_file(void)
{printf("%s, %d, start !\r\n", __func__, __LINE__);uint8_t *src_buf = NULL, *ucompr_buf = NULL;int ucompr_file_len = 0,src_file_len = 0;DIR dir;uint8_t *filename;FILINFO *fileinfo;FIL fpsrc, fpcompr;FRESULT res;uint32_t bw;int err = 0;filename = WOKOO_MALLOC(32*sizeof(uint8_t));if (filename == NULL){printf("malloc filename error \r\n");goto err_name;}fileinfo = (FILINFO*)WOKOO_MALLOC(sizeof(FILINFO));if (NULL == fileinfo) {goto err_finfo;}res = f_opendir(&dir, SRCPATH);if (res == FR_OK){while (1){/* Reads a file in the directory*/res = f_readdir(&dir, fileinfo);if (res != FR_OK || fileinfo->fname[0] == 0){/* Error/reached the end, exit */break;}res = exfuns_file_type(fileinfo->fname);/* Pick up four digits to see if it is a music file */if ((res & 0xF0) == 0x00){strcpy((uint8_t*)filename,COMPRPATH);/* Follow the file name*/strcat((uint8_t*)filename,(const uint8_t*)fileinfo->fname);printf("filename = %s\r\n",filename);res = f_open(&fpsrc, (uint8_t *)filename, FA_OPEN_EXISTING | FA_READ);if (res == 0){src_file_len = f_size(&fpsrc);printf("src_file_len = %d \r\n", src_file_len);src_buf = (uint8_t *)WOKOO_MALLOC(src_file_len * sizeof(uint8_t));if (src_buf == NULL) {printf("malloc %s buf error !\r\n", filename);continue;}res = f_read(&fpsrc, src_buf, src_file_len, &bw);if (res != FR_OK) {printf("read %s error !\r\n", filename);continue;}f_close(&fpsrc);}ucompr_file_len = src_buf[src_file_len -4] << 24 | src_buf[src_file_len - 3] << 16 | src_buf[src_file_len -2] << 8 | src_buf[src_file_len - 1];printf("ucompr_file_len : 0x%x \r\n", ucompr_file_len);ucompr_buf = (uint8_t *)WOKOO_MALLOC(ucompr_file_len * sizeof(uint8_t));if (ucompr_buf == NULL) {printf("malloc uncompr buf error \r\n");continue;}err = uncompress(ucompr_buf, &ucompr_file_len, src_buf, src_file_len);if(err != Z_OK) {printf("uncompress failed!\n");continue;}strcpy((uint8_t*)filename,UNCOMPRPATH);/* Follow the file name*/strcat((uint8_t*)filename,(const uint8_t*)fileinfo->fname);res = f_open(&fpcompr, filename, FA_CREATE_ALWAYS | FA_WRITE);if (res == FR_OK) {res = f_write(&fpcompr, ucompr_buf, ucompr_file_len, &bw);if(res != FR_OK) {printf("read image src error \r\n");}f_close(&fpcompr);}if (ucompr_buf != NULL) {WOKOO_FREE(ucompr_buf);ucompr_buf = NULL;}if (src_buf != NULL) {WOKOO_FREE(src_buf);src_buf = NULL;}}}f_closedir(&dir);}err_finfo:if (fileinfo != NULL) {WOKOO_FREE(fileinfo);fileinfo = NULL;}
err_name:if (filename != NULL) {WOKOO_FREE(filename);filename = NULL;}return;printf("%s, %d, end !\r\n", __func__, __LINE__);
}

demo

void demo_zlib(void)
{compress_file();uncompress_file();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/26844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sa-Token鉴权与网关服务实现

纠错&#xff1a; 在上一部分里我完成了微服务框架的初步实现&#xff0c;但是先说一下之前有一个错误&#xff0c;就是依赖部分 上次的学习中我在总的父模块下引入了spring-boot-dependencies&#xff08;版本控制&#xff09;我以为在子模块下就不需要再引用了&#xff0c;…

Opencv图像梯度计算

Opencv图像梯度计算 Sobel算子 可以理解为是做边缘检测的一种方法。 首先说明自己对图像梯度的简单理解&#xff1a;简单理解就是图像的颜色发生变化的边界区域在X方向和Y方向上的梯度值 Gx Gy 而Gx和Gy处的梯度的计算—使用下面的公式来进行计算。 G x [ − 1 0 1 − 2 0 …

【计算机网络】 传输层

一、传输层提供的服务 1.1 传输层的功能 1.1.1 传输层的功能如下&#xff1a; 传输层提供应用进程之间的逻辑通信&#xff08;即端到端的通信&#xff09;。与网络层的区别是&#xff1a;网络层提供的是主机之间的逻辑通信。 1.1.2 复用和分用 传输层要还要对收到的报文进行…

前段。html

<!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org"> <head> <meta charset"UTF-8"> <title>用户列表</title> </head> <body> <h1>用户列表</h1> <table> …

Web前端专科实习:技能提升、实践挑战与职业展望

Web前端专科实习&#xff1a;技能提升、实践挑战与职业展望 在数字化时代&#xff0c;Web前端技术作为连接用户与互联网世界的桥梁&#xff0c;其重要性日益凸显。作为一名Web前端专科实习生&#xff0c;我有幸在这个充满机遇和挑战的领域进行实践学习。接下来&#xff0c;我将…

【计算机毕业设计】258基于微信小程序的课堂点名系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

想建独立站,又怕收款有风险,该怎么办?看这篇就够了

小编关注独立站话题已久&#xff0c;了解到许多商家想建独立站但是又担心收款有风险&#xff0c;特别是FP独立站&#xff0c;由于FP商品的特殊性&#xff0c;更容易导致收款账号被封。 今天&#xff0c;小编就在这里教大家一招&#xff0c;解决收款难题&#xff01; 解决收款难…

总结【GetHub的WebAPI,ASSET_ID】,【Linux的jq命令】(草稿版+实际操作)

目录 1.介绍一下github中的 asset_id 2. GitHub 的 asset_id相关操作 2.1.获取特定 repository 的 release 列表&#xff1a; 2.2.获取特定 release 中的 asset 列表&#xff0c;并找到 asset_id&#xff1a; 2.3.使用ASSET_ID获取资材 3.返回的 assets 的信息 是什么样样…

【STM32CubeIDE -使用-调试过程中-遇到的“弹窗”报错问题-部分总结-处理方式】

【STM32CubeIDE -使用-调试过程中-遇到的“弹窗”报错问题-部分总结-处理方式】 1、前言2、软件环境问题1&#xff1a;Confirm Perspective Switch&#xff08;确认视角切换&#xff09;&#xff08;1&#xff09;问题描述:This kind of launch is configured to open the Debu…

14、modbus poll 使用教程小记1

开发平台&#xff1a;Win10 64位 Modbus Slave版本&#xff1a;64位 7.0.0 Modbus Poll版本&#xff1a;64位 7.2.2 因为项目中经常会用到modbus协议&#xff0c;所以就避免不了的要使用modbus测试工具&#xff0c;Modbus Slave/Poll无疑是众多测试工具中应用最广泛的。 文章目…

C语言的数据结构:串、数组、广义表

一、串 1、串的定义 串是一个线性表&#xff0c;但其节点中的内容只能为字符&#xff0c;所以也称为字符串。 字符串中可以有多个字符&#xff0c;也可以没有字符。没有字符的叫作&#xff1a;空串。 空串&#xff1a;""。 有值的串&#xff1a;"1123"。 只…

yolov3 详解

文章目录 1、yolov3原理2、损失函数3、yolov3改进4、使用opencv实现yolov35、卷积神经网络工作原理 1、yolov3原理 参考视频 darknet53&#xff1a;52个卷积层和1个全联接层 输入图像为416416 1313 -》 下采样32倍 2626 -》 下采样16倍 5252 -》 下采样8倍 由标注框中心点落在…

是字符串定义以及在C语言中字符串是如何表示的

字符串&#xff08;String&#xff09;是由零个或多个字符&#xff08;包括空格&#xff09;组成的有限序列&#xff0c;常用于文本数据的存储和处理。在编程中&#xff0c;字符串是常见的数据类型。 在C语言中&#xff0c;字符串不是一种内置的数据类型&#xff0c;但C语言提…

13600KF+3060Ti,虚拟机安装macOS 14,2024年6月

距离上次装macOS虚拟机已经有一段时间了&#xff0c;macOS系统现在大版本升级的速度也是越来越快了&#xff0c;由于Office只支持最新三个版本的macOS&#xff0c;所以现在保底也得安装macOS 12了&#xff0c;我这次是用macOS 14做实验&#xff0c;13和12的安装方式和macOS 14一…

什么是计算机视觉?

计算机视觉 (CV) 是人工智能 (AI) 的一个分支领域&#xff0c;是指让计算机和系统能够从图像、视频和其他视觉输入中获取有意义的信息&#xff0c;并根据该信息采取行动或提供建议。 如果说人工智能赋予计算机思考的能力&#xff0c;那么计算机视觉就是赋予发现、观察和理解的能…

eNSP学习——PPP的认证

目录 主要命令 原理概述 实验目的 实验内容 实验拓扑 实验编址 实验步骤 1、基本配置 2、搭建OSPF网络 3、配置PPP的PAP认证 4、配置PPP的CHAP认证 主要命令 //设置本端的PPP协议对对端设备的认证方式为 PAP&#xff0c;认证采用的域名为huawei [R3]int s4/0/0 [R…

Android 14 系统启动流程 之 启动init进程、启动Zygote进程

Android 14 系统启动流程 之 启动init进程、启动Zygote进程 废话不多说&#xff0c;先上图&#xff0c;不清楚的可以在评论区留言。

【论文阅读】-- 时态合并树状图:时态标量数据的基于拓扑的静态可视化

时态合并树状图&#xff1a;时态标量数据的基于拓扑的静态可视化 摘要1 引言2 相关工作及背景介绍2.1 增广合并树2.2 (增强)合并树的可视化与跟踪2.3 特征跟踪2.4 数据线性化 3 时间合并树状图3.1 映射单个时间步长&#xff1a; R d → R R^d \rightarrow R Rd→R3.2 映射所有时…

python:faces swap

# encoding: utf-8 # 版权所有 2024 涂聚文有限公司 # 许可信息查看&#xff1a;pip install boost # 描述&#xff1a;pip install boost # pip install dlib # pip install cmake3.25.2 # pip install dlib19.24.2 如果安装不上&#xff0c;按此法 # Author : geovindu,G…

实用软件下载:MathType最新安装包及详细安装教程

MathType是强大的数学公式编辑器&#xff0c;与常见的文字处理软件和演示程序配合使用&#xff0c;能够在各种文档中加入复杂的数学公式和符号&#xff0c;可用在编辑数学试卷、书籍、报刊、论文、幻灯演示等方面&#xff0c;是编辑数学资料的得力工具。MathType与常见文字处理…