Я впервые программирую на C и в системе UNIX. Я пытаюсь сделать что-то довольно простое. У меня есть двоичный файл, который является изображением карты камеры Compact Flash и состоит из нескольких изображений JPG. Я пытаюсь прочитать файл, найти последовательность байтов, соответствующую FF D8, FF E0 или FF D8, FF E1, знакам начала файла JPG, затем записать все между этим значком и рядом с новым файлом JPG .
В данный момент я просто пытаюсь заставить мой компьютер распечатать файл как есть, считав его в блоках размером 512 единиц, с указанным размером блоков в исходной файловой системе. У меня есть следующий код:
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
int main (int argc, char *argv[])
{
FILE * raw;
FILE * currentimage;
char buf[512];
char beg1[32] = "11111111110110001111111111100001";
char beg2[32] = "11111111110110001111111111100000";
raw = fopen("card.raw", "rb");
while((fread(buf, sizeof(raw), 512, raw) > 0))
{
printf(buf);
printf("\n");
}
}
Он просто распечатывает файл, отформатированный в том виде, в котором я предполагаю, что это ASCII, так что он выглядит как кучка болтовни. Как я могу получить эти данные в формате двоичных 1 и 0 или, что еще лучше, шестнадцатеричных 0-F?
Любая помощь будет высоко ценится.
P.S. beg1 и beg2 соответствуют двоичным значениям шестнадцатеричных значений, которые я ищу, но они на самом деле не имеют отношения к остальному коду, который у меня есть на данный момент.