У меня есть двоичный файл, и я хочу прочитать его двойной.Чтение double из двоичного файла (порядок байтов?)
В шестнадцатеричном представлении, у меня есть эти 8 байт в файле (а потом еще немного после этого):
40 28 25 с8 9бов 77 27 с9 40 28 98 80 8 8б 2b d5 40 ...
Это должно соответствовать двойному значению около 10 (в зависимости от того, что означает эта запись).
Я использовал
#include<stdio.h>
#include<assert.h>
int main(int argc, char ** argv) {
FILE * f = fopen(argv[1], "rb");
assert(f != NULL);
double a;
fread(&a, sizeof(a), 1, f);
printf("value: %f\n", a);
}
Однако, что печатает значение: -261668255698743527401808385063734961309220864,000000
Итак, ясно, что байты не преобразуется в двойной правильно. Что происходит? Используя ftell, я могу подтвердить, что читается 8 байтов.
Где код, который ** написал ** эти «байты», и был ли он с той же платформы? – WhozCraig
Похоже, что исходная система записывала данные как большие конечные элементы, и вы пытаетесь прочитать ее как маленький endian - вам просто нужно изменить порядок 8 байтов. –
Btw, '12.0738' для первого,' 12.2979' для второго и т. Д., Если вы меняете байты, поэтому ... обратные байты, если читаете на платформе LE. Я искренне надеюсь, если вы сделаете это * все * платформы * напишите * данные в BE. – WhozCraig