Алгоритм Преобразования 8bit В 7bit

Security

New Member
17.04.2010
1
0
#1
Есть функция преобразования строки символов из 7bit в 8bit.
C++:
str = "Hello!"; 
AnsiString String7To8(AnsiString str) 
{ 
AnsiString result = ""; 
char input[128]; 
char decode[128]; 
int len; 

sprintf(input,"%s",str.c_str()); 

unsigned char c, w; 
int n, m, shift, x; 
len = strlen(input); 
shift = 0; decode[0] = 0; 


/* Decode into 7 bit characters */ 
for(n=0; n<len; ++n) 
{ 
c = input[n] & 0x7f; 
c >>= shift; 
w = input[n+1] & 0x7f; 
w <<= (7-shift); 
shift +=1; 
c = c | w; 
if(shift == 7) 
{ 
shift = 0x00; 
n++; 
} 
x = strlen(decode); 
decode[x] = c; 
decode[x+1] = 0; 
} 
// Display decoded output as Hex 
for(unsigned int i = 0; i < strlen(decode); i++) 
{ 
sprintf(msg,"%.02X",(unsigned char)decode[i]); 
result += AnsiString(msg); 
} 
return result.Trim(); 
}
В итоге получаем C8329BFD0E01

Пробовал переделать данную функцию для обратного преобразования, но что-то не работает. На выходе должно получиться Hello!

C++:
str = "C8329BFD0E01"; 
/* Decode into 8 bit characters */ 
AnsiString String8To7(AnsiString str) 
{ 
AnsiString result = ""; 
char input[128]; 
char msg[128]; 
char decode[128]; 
int len; 

sprintf(input,"%s",str.c_str()); 

unsigned char c, w; 
int n, m, shift, x; 
len = strlen(input); 
shift = 0; decode[0] = 0; 

for(n=0; n<len; ++n, ++m) 
{ 
c = input[n]<<shift; 
c = c & 0x7f; 
if(n > 0) 
{ 
w = input[n - 1]>>(7-shift); 
msg[m] = c | w; 
} 
shift+=1; 
if(shift > 6) 
{ 
shift = 0; 
n++; 
} 
x = strlen(decode); 
decode[x] = c; 
decode[x+1] = 0; 
} 
}