You would start with hex(string)
just to make a number out of it. It wouldn’t be the right number, but it will be easier to parse than text.
theNumber = hex(string)
Next, you want to determine if it is positive or negative. Since this is “classic” Panorama “theNumber” will already have the right sign, but Panorama X would consider an 8 digit hex value to be positive regardless. To make it continue to work when it is ported to Pan X, you could use
theSign = ?(theNumber and hex("80000000"),-1,1)
Next, you want to isolate the exponent, and adjust for the offset.
theExponent = (theNumber and hex("7F800000"))\8388608 - 150
Then, you isolate the significand, including the hidden bit.
theMantissa = (theNumber and hex("7FFFFF")) or hex("800000")
and then you put them all together, with zero as a special case.
theNumber = ?((theNumber and hex("7FFFFFFF")) = 0, 0, theSign*theMantissa*2.00000^theExponent)
theNumber should now be a floating point number, which you can convert to decimal text in the usual ways, using str( or pattern(.
This doesn’t deal with some of the more exotic floats, like denormalized floats, or infinity or NaN, but I expect it will work with all the cases you need to deal with.