⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encode_decode.cpp

📁 短消息数据解码格式
💻 CPP
字号:
#include <stdio.h>
#include <string.h>

typedef unsigned char UINT8;
typedef unsigned short UINT16;
typedef unsigned long UINT32;

//const UINT8 str_string[] = "1234";
//const UINT8 str_string[] = "hellohello";
const UINT8 str_string[] = "hello world";

UINT8 bit8str[140];
UINT8 bit7str[140];

UINT8 Encode_English(UINT8 * ptrbit8,UINT8 * ptrbit7,UINT8 length);
UINT8 Decode_English(UINT8 * ptrbit7,UINT8 * ptrbit8,UINT8 length);

void main(void)
{
	UINT8 length,i;
	memset(bit8str,0,sizeof(bit8str));
	memset(bit7str,0,sizeof(bit7str));
	length = sizeof(str_string) - 1;
	memcpy(bit8str,str_string,length);
	
	length = Encode_English(bit8str,bit7str,length);
	for(i=0;i<length;i++)  printf("%02x  ",bit7str[i]);
	printf("\n");

	length = Decode_English(bit7str,bit8str,length);
	for(i=0;i<length;i++)  printf("%c  ",bit8str[i]);
	printf("\n");
}

UINT8 Encode_English(UINT8 * ptrbit8,UINT8 * ptrbit7,UINT8 length)
{
	UINT8 i,n,tempstr,rtnlen;
	n = 0;
	rtnlen = 0;
	for(i=0;i<length;i++)
	{
		if(i != length-1)
		{
			tempstr = (ptrbit8[i] & 0x7f) >> n;
			tempstr |= (ptrbit8[i+1] << (7-n));
		}
		else			//last byte
		{
			tempstr = (ptrbit8[i] & 0x7f) >> n;
		}
		*ptrbit7++ = tempstr;
		rtnlen++;
		n = (n+1) % 7;
		if(n == 0)  i++;
	}
	return rtnlen;
}

UINT8 Decode_English(UINT8 * ptrbit7,UINT8 * ptrbit8,UINT8 length)
{
	UINT8 i,n,tempstr,rtnlen;
	n = 0;
	rtnlen = 0;
	i = 0;
	while(i < length)
	{
		if(n == 0)			//first byte of the eight bytes
		{
			tempstr = ptrbit7[i] & 0x7f;
			i++;
		}
		else if(n == 7)
		{
			tempstr = 0;
			tempstr |= ptrbit7[i-1] >> (8-n);
		}
		else
		{
			tempstr = (ptrbit7[i] << n) & 0x7f;
			tempstr |= ptrbit7[i-1] >> (8-n);
			i++;
		}
		*ptrbit8++ = tempstr;
		rtnlen++;
		n = (n+1) % 8;
	}
	return rtnlen;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -