c проблемы чтения двоичного файла - PullRequest
0 голосов
/ 06 августа 2010

привет, я читаю двоичный файл, используя c, как показано здесь текст ссылки

, чтобы вся информация, считанная из двоичного файла, сохранялась в "char * buffer". у меня есть стандарт формата, где говорится, что одна из строк должна быть

   format: unsigned char, size: 1 byte

я делаю следующее:

   printf("%x\n", buffer[N]);

но что мне делать, когда формат говорит:

   format: unsigned short, size: 2 bytes

если я сделаю это следующим образом, это будет правильно:

   printf("%d%d\n", buffer[N], buffer[N+1]); 

если нет, можете ли вы показать мне правильный путь?

Также можете ли вы сказать мне, если при печати правильно указано следующее:

   char              %c
   unsigned long     %ul
   unsigned short    %d
   unsigned char     %x
   double            %f
   long              %ld

все данные в двоичном файле в формате с прямым порядком байтов! заранее большое спасибо!

1 Ответ

2 голосов
/ 06 августа 2010

Попробуйте printf("%d", (short)(buffer[N] + buffer[N+1]<<8)). Теперь обратите внимание, что я должен был предположить, что в байтовом порядке в буфере был младший байт из двухбайтовых short, хранящихся по нижнему адресу.

Я, вероятно, мог бы написать *(short *)(&buffer[N]), но это предполагает, что N имеет правильное выравнивание для хранения short на вашей платформе, и что буфер и платформа согласовывают порядок байтов.

Это на самом деле только верхушка очень большого айсберга темы. Есть много скрытых проблем, и некоторые действительно неубедительные, когда вы переходите к значениям с плавающей запятой.

...