C: unsigned short хранится в буфере после того, как fread из двоичного файла не соответствует исходному шаблону - PullRequest
0 голосов
/ 27 мая 2018

У меня есть двоичный файл, заполненный 2-байтовыми словами, следующими за этим шаблоном (в HEX): 0XY0.это часть кода, где я выполняю fread и fopen.

unsigned short buffer[bufferSize]; 
FILE *ptr;                          //

ptr = fopen(fileIn,"rb");           //

if(ptr == NULL)
{
    fprintf(stderr,"Unable to read from file %s because of %s",fileIn,strerror(errno));
    exit(20);
}

size_t readed = fread(buffer,(size_t)sizeof(unsigned short),bufferSize,ptr);
if(readed!=bufferSize)
{
    printf("readed and buffersize are not the same\n");
    exit(100);
}
//---------------------------

Если я смотрю на любое содержимое буфера, например, на buffer [0], вместо того, чтобы быть коротким с шаблоном 0XY0, онэто короткая модель Y00X Где моя ошибка?это что-то относительно порядка байтов?Конечно, я проверил каждый элемент внутри буфера.программа выполняется без ошибок.

РЕДАКТИРОВАТЬ: Если я читаю из файла с размером char вместо short, содержимое буфера (очевидно, изменилось на char buffer [bufferSize * 2];) соответствует шаблону OXYO.Таким образом, у меня есть (например) буфер [0] 0X и буфер [1] Y0

1 Ответ

0 голосов
/ 27 мая 2018

Ваша проблема, похоже, является типичной для несоответствия между порядком байтов между программой, которая сохранила данные в файл, и той, которая их читает.Помните, что процессоры мобильных телефонов, как правило, используют представления с прямым порядком байтов и ноутбук с прямым порядком байтов.

Другое потенциальное объяснение - ваш файл мог быть записан в текстовом режиме программой на основе Windows, которая преобразовывала байты 0x0A впары 0x0D / 0x0A, что приводит к смещению содержимого и к тому же шаблону, который вы наблюдаете.

Вместо чтения файла с fread вы должны читать его побайтно и вычислятьзначения в соответствии с порядком байтов, указанным для формата файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...