Incidentally, I want to save some more RAM by converting the floats into uint16. Really, a uint8 should be enough, but if I do that then the data no longer has value outside watching it on a scope.

Ideally I'd like an unsigned floating point that's 16-bits wide, as I really only need 10 bits for three significant digits and could use the other 6 bits for the exponential. Or 14 bits for four sig digits and two bits for the powers of 10. However, that would require a custom UAVO type.