I have the following code that writes 6 float to disk in binary form and reads them back:
#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; } }
It outputs:
0 0.23 0.46 0.69 0.92 1.15 0 0.23 0.46 0.69 0.92 1.15
When I upload the file to hexer, we get:
00 00 00 00 1f 85 6b 3e 1f 85 eb 3e d7 a3 30 3f 1f 85 6b 3f 33 33 93 3f -- -- -- -- -- -- -- --
I want to calculate the float value from decimal directly. For example: 1f 85 6b 3e becomes 0.23, and 1f 85 eb 3e becomes 0.46.
I tried several "binary swim" calculators on the Internet. When I put in the hexadecimal representation of the number, 0x1f856b3e , in both calculators I return 5.650511E-20, But I thought the value should be 0.23, since I provided 5-8 bytes to the calculator, and these bytes represent the second float written to disk.
What am I doing wrong?
source share