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;
}