message.data represents one bit where that bit is the x bit value of an 8, 16, 32 bit value.
The first 8-bits of any value would be like this:
bit = value
0 = 0x01
1 = 0x02
2 = 0x04
3 = 0x08
4 = 0x10
5 = 0x20
6 = 0x40
7 = 0x80
(0x being hex, base 16, prefix).
The long way would be to use bit shifting to make the value for each and then sum it.
message.data[3] << 3 … if the bit is set this value will be 0x08
message.data[4] << 4 … if the bit is set this value will be 0x10
int myInt = (message.data[3] << 3) + (message.data[4] << 4) + (message.data[5] << 5) + (message.data[6] << 6);
OR you can use bitmasking which would be the shorter way…
Let’s say you just want to know if bits 3, 4, 5, 6 are set in an 8 bit value and you specifically do NOT want to know the value of bits 0, 1, 2, and 7.
myInt = message.data & 0x78;
What the above will do is only set bits 3, 4, 5, 6 in your myInt value if they are set in the message.data value and it will specifically ignore the value of bits 0, 1, 2 and 7 if they are set.
That said, if bits 3-6 represent a distinct value, you need to shift that value over once you have it–
myInt = (message.data & 0x78) >> 3;