# What kind of memory representation is this?

I am reverse engineering a protocol used by an embedded device. This protocol message contains an 8-bit field which I believe to represent an integer number.

To analyze the format used to encode such integer, I have captured some messages and the number I can read on the appliance screen.

This is the 8-bit data I have captured and the integer that is encoded.

``````0001 1001 = 18
0001 0110 = 12
0000 1010 = 21
0000 0011 = 7
``````

Looking at the data, I have realized that to convert the binary number to the corresponding decimal value the following procedure can be applied:

``````1. Take the lower 4 bits and shift them upwards of one position
2. Take the rightmost bit of the higher 4 bit, negate it, and OR it with the bits obtained in the first point.
``````

It looks like some kind of value/multiplier scheme, where the higher 4 bits are the multiplier and the lower 4 bits are the value.

The biggest number I have captured is 21, so I don't know the format behaviour for higher numbers the should use more than 5 bits.

The question is, what kind of integer memory representation is this? How will the bits behave for numbers requiring more than 5 bits?