05-22-2012 09:27 AM
How do I properly convert an int to a float?
I input a number such as 0x42c26163
The final number should be 97.19021
I thought I could just do a cast so I tried this:
int test = 0x42c26163;
float test2 = (float)test;
But test2 comes up 1.120035171 E9
How do I get to the final 97.19021?
In another project I'm working on using C#, the conversion works when I use the BitConverter class.
I'm sure I am just overlooking the obvious, but can someone can help me?
05-22-2012 10:27 AM
I suppose that int number is really the content of a float read back from raw memory or received from an instrument or on some communication channel. Rebuilding the float number has been discussed a couple of ways in the forums: I can suggest you look at this thread or this other one which give you feasible solutions.
This is basically a reflect of how floating point numbers are stored in memory according to IEEE754 standard, which you may want to take a look at to understand a bit how all the matter is treated.
05-22-2012 10:41 AM
You can do:
int test = 0x42c26163; float test2 = *(float *)&test;
Or you could fiddle about with a union.
05-22-2012 11:06 AM
Thank You, that works great!
What exactly does *(float *) mean?
Thanks
JW
05-22-2012 02:48 PM
I use this kind of construction a lot particulary because it allows you to assign integers to bit structures, and retrieve integers from bit structures.
Read it as, "the value that is pointed to, by the float pointer that points to, the integer at this address".
It sounds like the same thing as casting a float, but I think there are compiler issues with getting the right number of bytes assigned. The pointer trick fixes that.
05-23-2012 01:06 AM
maybe better definition:Get pointer to memory "&test" a and interpret it as pointer to float "(float *)" then get value from this pointer "*"
05-30-2012 02:50 PM
Cast a pointer to be of type "pointer to float" and then de-reference it.