Converting float to bytes

  • Hello - I'm trying to convert an ambient sensor readout into bytes so I can squeeze it down the LoRa tube! I can't seem to get the float.hex() attribute to work, I get this back: AttributeError: type object 'float' has no attribute 'hex'.

    The Python3 docs say that float.hex() is a built in type, am I missing something here?

    I tried the following:

    temp = float.hex(sensordata)
    temp = sensordata.hex()

    Both return the same attribute error. Where am I going wrong? Is there a module I need to include? Here is the main module from my project:

    import bme680
    from bme680.i2c import I2CAdapter
    from machine import Pin
    import time
    import struct
    # Config pin:
    configPin = Pin('P21', Pin.IN, Pin.PULL_UP)
    # Setup I2C and BME680: P9/G16=SDA, P10/G17=SCL
    i2c_dev = I2CAdapter(1, pins=('P9','P10'), baudrate=100000)
    sensor = bme680.BME680(i2c_device=i2c_dev)
    # These oversampling settings can be tweaked to
    # change the balance between accuracy and noise in
    # the data.
    config = configPin()
    if config:
        while True:
            if sensor.get_sensor_data():
                output = "{} C, {} hPa, {} RH, {} RES,".format(
                temp = float.hex(

  • @aidanrtaylor Yes, you need pack() to make a bytes string out of a float, and unpack() will convert that back.
    unpack() returns a tuple, wheras pack() in addition to a tuple accepts a single value.

  • isn't unpack the opposite of what I want? I thought I would need pack

    Oh, I see you are showing me how to do both ;)

  • @robert-hh beat me to it ;-)


    and using 'e' instead of 'f' for the format will mean the float uses 4 bytes in hex form. at the loss of precision but doubt you need that much for temp ;-)

  • thanks, trying it out now (I already had stuct imported as you can see above :P)

  • @aidanrtaylor use struct.pack() instead.

Log in to reply

Pycom on Twitter