чтение двойного из двоичного файла в c - PullRequest
3 голосов
/ 10 августа 2010

Может кто-нибудь показать, как правильно преобразовать двоичные представленные данные в двойное значение в C. Например, у меня есть 8 беззнаковых значений, которые нужно преобразовать в двойное значение (назовем его буферным).поэтому бит буфера [0] равен LSB, а бит буфера [7] равен MSB.Большое спасибо заранее!

Ответы [ 2 ]

4 голосов
/ 10 августа 2010

ЕСЛИ ВСЕ верно:

  1. Ваша машина с прямым порядком байтов.
  2. На вашем компьютере sizeof(double) == 8
  3. Представление вашей машины о "байте" такое же, как и о машине, которая сохранила данные (не все машины используют октеты / 8-битные байты).
  4. Формат вашей машины с плавающей запятой соответствует формату машины, на которой были сгенерированы / сохранены данные.

Вы можете просто прочитать 8 байтов в массив и выполнить приведение (предполагается, что 'fd' - дескриптор открытого файла):

char bytes[8];
fread(&bytes, 8, 1, fd);
double d = *((double*)bytes);

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

3 голосов
/ 10 августа 2010

Просто брось, я думаю

char buf[8];
double x;
...
x = *((double*) buf);
...