char* UUEcode(char *in,unsigned size){
unsigned code_size=(size/double(3)+1)*4+1;
char *out=new char[code_size];
unsigned char s[3];
unsigned char c[4];
unsigned i,j,k;
k=0;
for(i=0;i<size;i+=3){
for(j=0;j+i<size && j<3;j++){
s[j]=in[i+j];
}
for(;j<3;j++)
s[j]=0;
c[0]=(s[0]&0xFC)>>2;
c[1]=((s[0]&0x03)<<4)+((s[1]&0xF0)>>4);
c[2]=((s[1]&0x0F)<<2)+((s[2]&0xC0)>>6);
c[3]=(s[2]&0x3F);
for(j=0;j<4;j++)
c[j]+=32;
for(j=0;j<4;j++)
out[k+j]=c[j];
k+=j;
}
out[k]=0;
return out;
}
char* UUEdecode(char *in,unsigned &size){
unsigned code_size=(size/double(4)+1)*3+1;
char *out=new char[code_size];
unsigned char c[3];
unsigned char s[4];
unsigned i,j,k;
k=0;
for(i=0;i<size;i+=4){
for(j=0;j+i<size && j<4;j++){
s[j]=in[i+j];
}
for(;j<4;j++)
s[j]=0;
c[0]=s[0]-32;
c[1]=s[1]-32;
c[0]<<=2;
c[0]|=(c[1]>>4)&0x03;
c[1]<<=4;
c[2]=s[2]-32;
c[1]|=(c[2]>>2)&0x0F;
c[2]<<=6;
c[2]|=(s[3]-32)&0x3F;
for(j=0;j<3;j++)
out[k+j]=c[j];
k+=j;
}
out[k]=0;
size=k;
return out;
}
это вот на С++
Сообщение от Phantom_wc
Вот блин. Сейчас я буду жёстко ламерить. Нифига не понял эту строку:
head=bytes[0]&0xff|bytes[1]<<8&0xff00;
Видимо какие-то операции с битами. Объясните плиз, как оно работает или дайте ссылку какую-нибудь полезную, желательно на русском.
|
& - как парвило коньюнкция
| - дизъюнкция
<< - сдвиг влево