Это неэффективный способ, по крайней мере, я так не думаю, но он будет работать во всех ситуациях независимо от размера массива и легко преобразуется в b.
__int8 p[] = {1, 1, 1, 1, 1}; //Let's say this was the array used.
int value = sizeof(p); //Just something to store the length.
memcpy(&value, &p, value > 4 ? 4 : value); //It's okay to go over 4, but might as well limit it.
В приведенном выше примере переменная "value" будет иметь значение 16 843 009. Что эквивалентно тому, если вы сделали ниже.
int value = p[0] | p[1] << 0x8 | p[2] << 0x10 | p[3] << 0x18;