Calculator to convert binary to float - what am I doing wrong?

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?

+6
source share
1 answer

This is endianness if, for example, you switch:

 1f 85 6b 3e 

in

 3e 6b 85 1f 

this will result in .23 when converting it using one of your converters, for example, I used IEEE 754 Converter and Floating Point to Hex Converter allows you to perform double as well as single-precision conversions.

+10
source

All Articles