Floats consists of [encoding/INT]-encoded mantissa "m" and base-2 exponent "e": m * pow(2,e). Normalised values *must* be used. Separate tag's values are used for representing NaN and infinite numbers. Zero is represented as zero mantissa and exponent. NaN = 0x10 +inf = 0x11 -inf = 0x12 float(m, e) = 0x13 || INT(m) || INT(e) 0.0 = float(0, 0) That representation is far from being compact. Sending binary IEEE754 binaries may be more preferable. Example representations: NaN | 10 +inf | 11 -inf | 12 0.0 | 13 0C80 0C80 45.25 m=181 e=-2 | 13 0C81B5 0D8101 -45.25 m=-181 e=-2 | 13 0D81B4 0D8101 0.125 m=1 e=-3 | 13 0C8101 0D8102 0.15625 m=5 e=-5 | 13 0C8105 0D8104 123.456 m=8687443681197687 e=-46 | 13 0C871EDD2F1A9FBE77 0D812D