проблема отображения - все в этом утверждении:
printf("%04x\n", *memory);
сначала используйте строку формата, которая представляет формат, который вы хотите отобразить. Возможно:
"%02x %02x %02x $02x\n"
Следующий предложенный код:
- безошибочно компилирует
- выполняет желаемую функциональность
- правильно обрабатывает ошибки ввода-вывода
- не включает заголовочные файлы, содержимое которых не используется
И теперь предложенный код:
#include <stdio.h>
//#include <string.h>
#include <stdlib.h> // exit(), EXIT_FAILURE
#define MAXMEM 1024
char memory[MAXMEM];
size_t loads(char *filename)
{
FILE *file = fopen(filename, "rb");
if( !file )
{
perror( "fopen for read failed" );
exit( EXIT_FAILURE );
}
return fread(memory, sizeof *memory, MAXMEM, file);
}
int main(int argc, char **argv){
if( argc != 2 )
{
fprintf( stderr, "USAGE: %s inputFileName\n", argv[0] );
exit( EXIT_FAILURE );
}
char *filename = argv[1];
size_t fileSize = loads(filename);
printf( "File Size: %zu\n", fileSize );
printf("%02x %02x %02x %02x\n",
memory[0],
memory[1],
memory[2],
memory[3]);
}
при запуске с тем же исходным файлом приводит к:
File Size: 701
23 69 6e 63
Примечание: 23 69 6e 63
- это шестнадцатеричные значения для #inc
Я изменил память, чтобы иметь тип char
. Если вы хотите сохранить его unsigned
, обратите внимание, что 32-битный без знака содержит 8 полубайтов, поэтому строка формата вызова printf()
должна быть %08x
для каждого отображаемого значения без знака