# Representing floats as a series of hex values

### 4 thoughts on “Representing floats as a series of hex values”

1. Does anyone have any ideas on how to represent a float value as 4 hexadecimal values when the struct module is unavailable? In C you would just cast a float* to an uint8_t* and iterate over the 4 bytes but I cannot figure out how to concatenate them back to a float in Python.

1. Cosmin Buhu says:

1. 3.14 is represented as 0x4048f5c3 or [0x40 0x48, 0xf5, 0xc3] when using IEEE754 floating point notation. This can easily be sent as 4 bytes from a C program and then decoded back to a float using the python struct module:

`>>> struct.unpack('>f', 'x40x48xf5xc3')`

`(3.140000104904175,)`

However, since the Telit interpreter lacks this module it becomes trickier. Anyway, I rolled my own decoder which turned out to be fairly trivial. A bit slow, perhaps:

`def get_float(data):`

`    """`

`    Extracts a float value encoded as IEEE 754 single point precision.`

`    @param data: List to read data from.`

`    @return: Data converted to a single precision floating point value.`

`    """`

`    int_val = get_uint32(data)`

`    SIGN_MASK = 0x80000000`

`    EXP_MASK = 0x7F800000`

`    FRAC_MASK = 0x7FFFFF`

`    # Extract sign, the most significant bit`

`    negative = int_val & SIGN_MASK`

`    # Extract exponent`

`    exp = ((int_val & EXP_MASK) >> 23) - 127`

`    # Calculate significand`

`    sig = 0x800000 | (int_val & FRAC_MASK)`

`    sig = float(sig) / 0x800000`

`    # Calculate final float value.`

`    val = sig * (2 ** exp)`

`    return -val if negative else val`

1. Cosmin Buhu says:

Much appreciated Marco!