📄 encode_decode.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 + -