guint32 get_packed_int32(tvbuff_t *tvb, guint8 *number_of_bytes, gint32 *value, guint32 offset)
{
    int n;
    gint32 val = 0;
    guint8 b;
    for (n = 1; n <= 4+1; n++) {        /* große Werte benötigen 5 Bytes */
        b = tvb_get_guint8(tvb, offset);
        offset += 1;
        if ((n == 1) && (b & 0x40)) {   /* Vorzeichen prüfen */
            b &= ~0x40;
            val = 0xffffffff;
            val <<= 6;
        } else {
            val <<= 7;
        }
        if (b & 0x80) {                 /* es folgt noch ein Byte */
            b &= ~0x80;
            val |= b;
        } else {                        /* alle Bytes gelesen */
            val |= b;
            break;
        }
    }
    *number_of_bytes = n;
    *value = val;
    return offset;
}