LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

Convert int to float

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?

0 Kudos
Message 1 of 7
(4,672 Views)

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.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Message 2 of 7
(4,663 Views)

You can do:

 

int test = 0x42c26163;
float test2 = *(float *)&test;

 Or you could fiddle about with a union.

--
Martin
Certified CVI Developer
0 Kudos
Message 3 of 7
(4,659 Views)

Thank You, that works great!

What exactly does *(float *) mean?

 

Thanks
JW

 

0 Kudos
Message 4 of 7
(4,655 Views)

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. 

0 Kudos
Message 5 of 7
(4,644 Views)

maybe better definition:Get pointer to memory "&test" a and interpret it as pointer to float "(float *)" then get value from this pointer "*"

0 Kudos
Message 6 of 7
(4,634 Views)

Cast a pointer to be of type "pointer to float" and then de-reference it.

0 Kudos
Message 7 of 7
(4,586 Views)