Калькулятор для преобразования двоичного значения в число с плавающей точкой - что я делаю не так?

У меня есть следующий код, который записывает 6 поплавков на диск в двоичном виде и читает их обратно:

#include <iostream>
#include <cstdio>

int main()
{
  int numSegs = 2;
  int numVars = 3;

  float * data = new float[numSegs * numVars];
  for (int i = 0; i < numVars * numSegs; ++i) {
    data[i] = i * .23;
    std::cout << data[i] << std::endl;
  }

  FILE * handle = std::fopen("./sandbox.out", "wb");

  long elementsWritten = 
    std::fwrite(data, sizeof(float), numVars*numSegs, handle);

    if (elementsWritten != numVars*numSegs){
      std::cout << "Error" << std::endl;
    }

    fclose(handle);
    handle = fopen("./sandbox.out", "rb");

    float * read = new float[numSegs * numVars];

    fseek(handle, 0, SEEK_SET);

    fread(read, sizeof(float), numSegs*numVars, handle);

    for (int i = 0; i < numVars * numSegs; ++i) {
      std::cout << read[i] << std::endl;
    }
}

Это выводит:

0
0.23
0.46
0.69
0.92
1.15
0
0.23
0.46
0.69
0.92
1.15

Когда я загружаю файл в гексер, мы получаем:

00 00 00 00 1f 85 6b 3e  1f 85 eb 3e d7 a3 30 3f
1f 85 6b 3f 33 33 93 3f  -- -- -- -- -- -- -- --

Я хочу, чтобы вычислить значение с плавающей запятой непосредственно из десятичного числа. Например:1f 85 6b 3e становится 0,23 и1f 85 eb 3e становится 0,46.

Я попробовал несколько бинарных калькуляторов в сети. Когда я вставляю шестнадцатеричное представление числа,0x1f856b3e, в обоих калькуляторах я получаю обратно 5.650511E-20. Но я подумал, что это значение должно быть 0,23, так как я предоставил в калькулятор байты 5–8, и эти байты представляют собой второе число с плавающей точкой, записанное на диск.

Что я делаю неправильно?

Ответы на вопрос(1)

Ваш ответ на вопрос