Подскажите простейший способ (и реализацию на C/C++) для кодирования/декодирования бинарного потока в поток, в кгтором присутствует меньший набор символов (так как это делает uue) ?
Может, пригодится, не совсем то, что требуется, но идею понять легко.
Кодирует/декодирует long int в четырехбуквенную последовательность.
encode переводит число в систему счисления по базе base и добавляет к
каждой полученной цифре пробел. Чтобы уложиться в ASCII диапазон
(32 -- 127) base должна быть не более 127-32 = 95
Максимальное long число, что может быть закодировано, при этом
94+94*95+94*95^2+94*95^3=81450624 (мне бОльших чисел не требовалось) < 2^32
Тривиально обобщается на 5 букв, тогда макс. число будет
94+94*95+94*95^2+94*95^3+94*95^4 = 7737809374 > 2^32
char *encode(long val, char *buf, int base)
{
long a,b,c,d;
d=base*base;/*base^2*/
c=d*base;/*base^3*/
a=val/c;/*val / base^3 */
b=(c=(val % c))/d;/* (val % base ^3 ) / base ^2 */
c=(d=(c % d))/base; /*(val % base^3 % base^2) / base */
d=d % base; /* val % base^3 % base^2 % base */
buf[0]=a+' ';buf[1]=b+' '; buf[2]=c+' ';buf[3]=d+' ';buf[4]=0;
return(buf);
}/*encode*/
long decode(char *buf, int base)
{
register long tmp=0, pw=1;
register int i;
for(i=3;!(i<0);i--){
tmp+=(buf[i]-' ')*pw;
pw*=base;
}
return(tmp);
}/*decode*/