Decode a base64 encoded binary struct into discrete sensor values vs attributes of a single sensor,

I’ve created some LoraWan sensors reporting their status via a RAK-Wireless WisGate EdgPro gateway brdiged to HA. I get the mqtt/json values, but the actual sensor data is stored in the json as:

...
    "data": "SwhZGQIkLNMDADM=",
    "data_encode": "base64",
...

and is actually a small C struct encoded as base64, and looks this:

typedef struct   {
    int32_t lat;
    int32_t lon;
    uint16_t hAcc;	// accuracy in meters
    uint8_t batt;
}  GPSMsg_t  ;

I’ve seen some examples of how to extract a single sensor value from a b64 encoded string, but is that the best solution when multiple values are in a single b64 “blob ?”

Does it make sense, or is it possible to create a single sensor with attributes corresponding to the “resurrected” C struct and if so, are those attributes stored with the sensor history (by default) ?

Would it be better to create a custom integration that knows the sensor and creates the approriate discrete sensor values?

Any suggestions are greatly appreciated!