Я хочу зашифровать файл JPEG. SIZE
предопределено, потому что файл, который я обрабатываю, имеет именно такой размер. Это просто для изучения обработки файлов и побитовых операторов, мне все равно, если результат просто мусор, поэтому маска не имеет значения. Я действительно новичок в gdb и valgrind, поэтому я не мог понять, что они говорят, ожидайте SIGSEGV. Вот код:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 7822
typedef unsigned char BYTE;
int main (void) {
FILE *fp;
if((fp = fopen("image.jpg" , "rb+")) == NULL){
fprintf(stderr , "Something gone wrong");
exit(EXIT_FAILURE);
}
BYTE mask = 0x12;
BYTE * newvalue = malloc(7822);
while (fread( newvalue , 1 , SIZE , fp) != SIZE){
*newvalue = *newvalue >> 1;
*newvalue = *newvalue & mask;
fwrite(newvalue , 1 , SIZE , fp);
}
free(newvalue);
fclose(fp);
return 0;
}
Я понял что-то странное. Это не так много, но я хотел бы поделиться. Всякий раз, когда я запускаю этот код, он увеличивает размер изображения на 3/4 от текущего размера.