Converting unsigned to signed

PeterH:
What is the value of phi_data? What float value are you expecting to derive from it?

I am trying to estimate angular position from an external sensor. If I have, for example, some large signed integer, 0000000010100000, then I want to convert that to 160 using the 'scale' multiplier. phi_data is supposed to contain the signed integer value, ready for float conversion. The idea was to read two unsigned values serially, perform bit-shift operations to concatenate them together to form one single value (phi_data), then convert that unsigned value to a signed value. Last, that signed value would be converted to a signed floating-point value (phi.data).

The reason I have the struct is because phi.data, theta.data and psi.data all need to be global values, as they will be used in multiple functions.

EDIT: I accidentally mis-defined the struct. It has been corrected.

PeterH:
There is quite a bit going on before you do anything involving floats. Am I right in assuming that this is the code you're having trouble with?

phi.data = float(phi_data)*scale;

That's the only piece of code I can imagine that's giving me trouble. I initially tried the following:

phi.data = float(phi_data);
phi.data = phi.data*scale;

but that also did not work.