Там у меня есть это назначение, где я должен эмулировать функцию hexdump из unix. У меня есть программа для выгрузки файлов в шестнадцатеричный формат, но у меня проблемы с печатью смещения и печатных символов.
Вот мой код:
/*performs a hex and an octal dump of a file*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define LINESIZE 512
void hexdump(FILE *fp);
void octaldump(FILE *fp);
int main(int argc, char * argv[])
{
FILE *fp;
if((fp = fopen(argv[1], "rb+")) == '\0')
{
perror("fopen");
return 0;
}
hexdump(fp);
return 0;
}
void hexdump(FILE *fp)
{
char temp [LINESIZE];
size_t i = 0;
size_t linecount = 1;
long int address = 0;
while(fscanf(fp," %[^\n] ", temp) == 1)
{
printf("%5d", address);
for(i = 0; i < strlen(temp); i++)
{
printf("%02x ", temp[i]);
if(linecount == 16)
{
printf("\n");
linecount = 0;
}
linecount++;
}
printf(" | ");
for(i = 0; i < strlen(temp); i++)
{
if(temp[i] < 32)
{
printf(".");
}
else
{
printf("%c", temp[i]);
}
}
printf("\n");
}
}
Как я уже говорил выше, моя программа должна печатать смещение, затем шестнадцатеричное значение файла, дополненное нулями, а затем печатаемые символы файла, например, так.
0000000 7f 2a 34 f3 21 00 00 00 00 00 00 00 00 00 00 00 | test file
Мне удалось распечатать печатные символы, но они появляются после шестнадцатеричной части. Поэтому, если одна строка шестнадцатеричного кода продолжается до следующей строки, она печатает печатные символы на следующей строке.
Например:
2a 3b 4d 3e 5f
12 43 23 43 | asfdg df
Как мне заставить его печатать любой символ, который появляется после одной строки шестнадцатеричных символов?
PS: По какой-то причине моя программа по каким-то причинам не дополняет нуля.
РЕДАКТИРОВАТЬ1: я получил смещение, я просто добавляю 16 к моей переменной адреса и продолжаю печатать