在一些嵌入式的项目设计中,空间是相当宝贵的,因为一个CPU的存储是有限的,所以此时我们在保存数据的时候,喜欢来进行压缩保存,著名的有哈夫曼树算法,专门用来做压缩的算法,当然,本节我们不讨论这些稍微高级的算法,写一个简单的例子,开发中遇见的,比如,我想把0xfe,0xf1,0x3e,0x3c这四个字节的数据存放在8个字节的buf里去,低4位在前,高4位在后,依次类推,存够8个byte。这时第一反应就是采用数组来进行设计这样的一个算法,如何设计?

假设,uchar tab[] = {0xfe , 0xf1 , 0x3e , 0x3c} ; uchar table[8] ; 我需要将tab的数据存放到table中去。

/*

table[0] = tab[0] & 0x0f ; //取低位

table[1] = tab[0] & 0xf0 ; //取高位

table[2] = tab[1] & 0x0f ; //取低位

table[3] = tab[1] & 0xf0 ;//取高位

...

table[6] = tab[3] & 0x0f ; //取低位

table[7] = tab[3] & 0xf0 ;//取高位

*/由数据规律可以得知,当i为奇数时,取高位,为偶数时,取低位,并且,当为奇数时,取到tab的下一个buf里的值 。

我们可以用如下代码来实现,即可得到相应的把4个byte的数据存储到8个byte的数组里去.

#include

unsigned char tab[4] = {0xfe,0xf1,0x3e,0x3c} ;

unsigned char table[8] ;

int main(void)

{

int i ;

int j ;

int count = 0 ;

for(i = 0 ; i < 8 ; i++)

{

if(i % 2 == 0)

table[i] = tab[count] & 0x0f ;

if(i % 2 != 0)

{

table[i] = tab[count] & 0xf0 ;

count++ ;

}

}

for(i = 0 ; i < 8 ; i++)

printf("table[%d]:0x%x\n",i,table[i]) ;

}

运行结果:

table[0] : 0xe

table[1] : 0xf0

table[2] : 0x1

table[3] : 0xf0

table[4] : 0xe

table[5] : 0x30

table[6] : 0xc

table[7] : 0x30

如果这个过程反过来,需要将8个byte的数据存到4个byte里去呢?由此我们可以有下面的规律:

假设savebuf用来存储4个byte的数据:

/*

savebuf[0] = table[0] | table[1] ;

savebuf[1] = table[2] | table[3] ;

savebuf[2] = table[4] | table[5] ;

savebuf[3] = table[6] | table[7] ;

*/同样观察出规律,由以下代码实现:

#include

unsigned char tab[4] = {0xfe,0xf1,0x3e,0x3c} ;

unsigned char table[8] ;

int savebuf[4] ;

int main(void)

{

int i ;

int j ;

int low , high , count = 0 , beat_count ,value ;

count = 0 ;

beat_count = 0 ;

for(j = 0 ; j < 8 ; j++)

{

if(j % 2 == 0)

low = table[j] ;

else

{

high = table[j] ;

count++ ;

savebuf[beat_count] = low | high ;

beat_count++;

}

}

for(i = 0 ; i < 4 ; i++)

printf("savebuf[%d]:%x\n",i , savebuf[i]) ;

}

运行结果:

savebuf[0]:fe

savebuf[1]:f1

savebuf[2]:3e

savebuf[3]:3c

c语言压缩存储,数据的压缩存储与解压缩算法实现(C语言)相关推荐

  1. 华为手表开发:WATCH 3 Pro(11)存储数据_轻量级存储_到本地

    华为手表开发:WATCH 3 Pro(11)存储数据_轻量级存储_到本地 初 环境与设备 文件夹: 文件 开发步骤 新增一个文本输入框 index.hml index.css 存储数据的逻辑 inde ...

  2. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )

    文章目录 一.使用 libjpeg-turbo 压缩图片流程 二.初始化 JPEG 压缩对象 三.打开文件 四.设置压缩参数 五.开始压缩 六.循环写入压缩数据 七.完成图片压缩及收尾 八.libjp ...

  3. 在c语言程序中将数据分为两种,2012年计算机二级C语言考点归纳汇总(一至四章)...

    第1章程序设计基本概念考点归纳 1.1 C语言的特点 C语言是近年来非常流行的语言,很多人宁愿放弃已经熟悉的其他语言而改用C语言,其原因是C语言有优于其他语言的一系列特点.下面是C语言的主要特点: ( ...

  4. 数据的压缩存储与解压缩算法实现(C语言)

    在一些嵌入式的项目设计中,空间是相当宝贵的,因为一个CPU的存储是有限的,所以此时我们在保存数据的时候,喜欢来进行压缩保存,著名的有哈夫曼树算法,专门用来做压缩的算法,当然,本节我们不讨论这些稍微高级 ...

  5. 「C语言进阶」数据内存的存储

  6. 蒙特卡洛 c语言,从伪随机数的产生到高大上的蒙特卡洛算法(C语言实现)

    一 准备 1 生成任意区间任意大小的伪随机数 2 什么是蒙特卡洛算法 二蒙特卡洛算法的实现 1 pi的蒙特卡洛计算方式 2 特殊图形的蒙特卡洛计算方式 通过这篇短文想说明两个道理: 看似高大上.神秘兮 ...

  7. c语言程序排序的原理,几种常见排序算法原理C语言实现

    使用WatiN进行UI自动化测试 Watin是一个UI自动化测试工具,支持ie/firefox,官方网站:http://watin.org/. 主要有以下特点: 支持主要的html元素,见:http: ...

  8. c语言求a b 最大公约数和最小公倍数,常见算法:C语言求最小公倍数和最大公约数三种算法...

    最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求 ...

  9. Android教程 -09 数据的持久化存储

    视频为本篇播客知识点讲解,建议采用超清模式观看, 欢迎点击订阅我的优酷 任何一个程序其实说白了就是在不停地和数据打交道,数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证及时手机关机的情况下 ...

最新文章

  1. 虚拟文件系统(VFS)
  2. 计算机网络基础与信息安全,大学计算机基础计算机网络基础与信息安全计算机网络概述教案.doc...
  3. php add 返回id,PHP curl_multi_close函数
  4. SAP 3D visual enterprise viewer 9.0 的下载方式
  5. 【物理总结】初中物理重要常数、单位换算、概念、规律和理论及知识的应用归纳大全梳理总结...
  6. PL/SQL -- DML 触发器
  7. sklearn.model_selection中train_test_split的坑
  8. git git 查看远程库_如何从Git远程存储库中提取
  9. 谷歌等质问IETF:IPv6的用户在哪里?
  10. 今天发现的好几个PP文字,不敢独享,gaga
  11. [120_移动开发Android]012_android开发之动画播放
  12. JAVA 生成API接口文档
  13. 计算机毕业设计的代码会查重吗,一般毕业论文会查重代码吗?
  14. 传统方式不同的变态下载(BT)
  15. python shell怎么调字体大小_如何更改在Python Shell字体大小
  16. VMware系列序列号
  17. Java Web程序设计——JSP技术(一)
  18. Win10运行红色警戒2尤里的复仇联机技巧+防守地图
  19. java bitmap api,RoaringBitmap的使用
  20. r5 5500u和r5 4600u区别有多大 r55500u和r54600u哪个好

热门文章

  1. python中turtle画雪花_turtle画雪花-方法及效果的详解
  2. 精确度,召回率,真阳性,假阳性
  3. 计算机专业专科可以进的国企,专科毕业想要进国企?这四大专业是首选,成功率高达50%...
  4. 2022.5.4.学习笔记数据类型
  5. 让用户做主 为IBM再造存储铺路?
  6. 像素级分层语义图像分割
  7. 今日头条新闻采集爬虫分享
  8. 开源项目-CRM客户关系管理系统
  9. 按降序显示奇数python_程序在Python中分别以升序和降序对所有偶数和奇数进行排序...
  10. docker命令讲解