// 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。如果一幅圖象是由很多塊顏色相同的大面積區域組成,那麼採用行程編碼的壓縮效率是驚人的。然而,該演算法也導致了乙個致命...