The answer from Rüdiger Klaehn gives the normal case, but it lacks some details. The bijection exits only in the domain of nice and clean floats.
Notice : representation of an IEEE float is sign_bit(1 bit) exponent(8 bits) sinificand(23 bits)
and the value is : (-1)<sup>sign</sup> * 2<sup>exp</sup> * significand
in clean cases. In fact, the 23 bits represent the fractional part of the actual significand, the integer part being 1.
All is fine for 0 < exp < 255
(which correspond to normal not null floats ) as an unsigned byte and in that domain you have a bijection.
For exp == 255
you have the infinite values is significand == 0
and all the NaN for significand != 0
- ok, you explicitely excluded them.
But for exp == 0
there are still weird things : when significand == 0
you have +0 and -0. I am not sure if they are considered equal. If anybody knows, please feel free to edit the post. But as integer values, they will of course be different.
And when exp == 0
and significand != 0
you find denormalized numbers ... which while not being equal will be converted to either 0 of the littlest number not being 0.
So if you want a bijection only use normal numbers having 0 < exp < 255<
and avoid NaN, infinite, 0 and denormal numbers where things are weird.
References :