Siemano. Muszę napisać program, który zakoduje wiadomość tekstową w obrazie. Obraz jest w formacie tekstowym w odcieniach szarości - wartości pikseli w zakresie 0-255. Wiadomość ma być zakodowana na ostatnim bicie kazdego piksela(lsb).Muszę użyć unii. Wiem, że muszę każdą literę muszę zamienić na postać binarną, a następnie każdy jej bit zakodowywać w pikselach. Wiem jak dobrać się do pierwszego znaku w pliku i zapisać w nim bit litery b0, jednak nie wiem jak przejść do kolejnego znaku pliku, by móc zapisać w nim wartość b1. Jak zrobić by zapisywać kolejno bity pierwszej litery tekstu b0-b7 w pikselach 0-7, bity drugiej litery tekstu b0-b7 w pikselach 8-15 i tak dalej? Czy powinienem utowrzyc 8 zmiennych q0-q7 w unii aby się do tego dobrać?
union bit_set{
struct {
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
};
unsigned char a;
}p,q0;
int encode(const char *input,char *txt, const char *output)//input nazwa obrazu, txt tekst, output nazwa wychodzacego pliku
{
FILE *fp1,*fp2;
if(input==NULL)
{
return 1;
}
if(output==NULL)
{
return 1;
}
if ((fp1=fopen(input,"r"))==NULL)
{
return 2;
}
if((fp2=fopen(output,"w+"))==NULL)
{
fclose(fp1); return 2;
}
int b;
for(unsigned int i=0;i<strlen(txt);++i)
{
p.a=*(txt+i);
while(fscanf(fp1,"%u ",&i)!=EOF)
{
b=i;
q0.a=b;
fprintf(fp2,"%d",q0.a);
}
}
fclose(fp1);
fclose(fp2);
return 0;
}