7Bit壓縮解壓演算法

2021-09-30 16:15:34 字數 2698 閱讀 3278

// 7bit.cpp : 定義控制台應用程式的入口點。

#include "stdafx.h"

#include

#include

unsigned char getbit(unsigned char ubyte, int ibitindex);

void setbit(unsigned char* lpbyte, int ibitindex, unsigned char uval);

int gsmencode7bit(const char* psrc, unsigned char* pdst, int nsrclength);

int gsmdecode7bit(const unsigned char* psrc, char* pdst, int nsrclength);

int _tmain(int argc, _tchar* ar**)

char* psrc = "helloworld";

char szdst[100] = ;

char szsrc[100] = ;

int len = gsmencode7bit(psrc, (unsigned char*)szdst, strlen(psrc));

gsmdecode7bit((unsigned char*)szdst, (char*)szsrc, len);

return 0;

// 7bit編碼    

// 輸入: psrc - 源字串指標    

//       nsrclength - 源字串長度    

// 輸出: pdst - 目標編碼串指標    

// 返回: 目標編碼串長度 

int gsmencode7bit(const char* psrc, unsigned char* pdst, int nsrclength) 

int idst;

int nbitsinbyte;

unsigned char* szdst = new unsigned char[nsrclength+1];

memset(szdst, 0x00, nsrclength+1);

idst = 0;

nbitsinbyte = 0;

for (int isrc = 0; isrc < nsrclength; isrc++)

for (int i = 0; i < 7; i++)

unsigned char ubitval = getbit(*(psrc+isrc), i+1);

setbit(szdst+idst, nbitsinbyte, ubitval);

nbitsinbyte++;

if (nbitsinbyte >= 8)

nbitsinbyte = 0;

idst++;

if (nbitsinbyte > 0)

idst++;

for (int i = 0; i < idst; i++)

sprintf((char*)pdst+2*i, "%02x", *(szdst+i));

delete szdst;

szdst = 0;

return idst*2;

// 7bit解碼    

// 輸入: psrc - 源編碼串指標    

//       nsrclength - 源編碼串長度    

// 輸出: pdst - 目標字串指標    

// 返回: 目標字串長度 

int gsmdecode7bit(const unsigned char* psrc, char* pdst, int nsrclength)

unsigned char uval;

int idst = 0;

int nbitsinbyte = 1;

for (int isrc = 0; isrc < nsrclength; isrc += 2)

sscanf((char*)psrc+isrc, "%02x", &uval);

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

unsigned char ubitval = getbit(uval, i);

setbit((unsigned char*)pdst+idst, nbitsinbyte, ubitval);

nbitsinbyte++;

if (nbitsinbyte >= 8)

nbitsinbyte = 1;

idst++;

if (nbitsinbyte > 0)

idst++;

return idst;

unsigned char getbit(unsigned char ubyte, int ibitindex)

unsigned char uval;

uval = ubyte;

uval = uval & (0x80 >> ibitindex);

uval = uval >> (7 - ibitindex);

return uval;

void setbit(unsigned char* lpbyte, int ibitindex, unsigned char uval)

unsigned char ubit = uval;

ubit = ubit & 0x01;

*lpbyte = *lpbyte | (ubit << (7 - ibitindex));

7bit編碼解碼 未測試

7bit編碼 輸入 psrc 源字串指標 nsrclength 源字串長度 輸出 pdst 目標編碼串指標 返回 目標編碼串長度 int gsmencode7bit const char psrc,unsigned char pdst,int nsrclength else 修改源串的指標和計數值 ...

用C實現7 bit編碼和解碼的演算法

用c實現7 bit編碼和解碼的演算法如下 7 bit編碼 psrc 源字串指標 pdst 目標編碼串指標 nsrclength 源字串長度 返回 目標編碼串長度 int gsmencode7bit const char psrc,unsigned char pdst,int nsrclength 修...

壓縮解壓演算法 2

行程編碼 run length coding 的原理也很簡單 將一行中顏色值相同的相鄰象素用乙個計數值和該顏色值來代替。例如aaabccccccddeee可以表示為3a1b6c2d3e。如果一幅圖象是由很多塊顏色相同的大面積區域組成,那麼採用行程編碼的壓縮效率是驚人的。然而,該演算法也導致了乙個致命...