Problema no tratamento de bytes sem sinal

Galera,

Tenho um array de bytes sem sinal, que li de uma interface serial. Preciso extrair números inteiros (4 bytes) deste array.

Fiz a seguinte função:

public static long ConvertToInt(byte[] bytes, int index) {
return (bytes[index] & 0xFF) | ((bytes[index + 1] & 0xFF) >> 8 ) |
((bytes[index + 2] & 0xFF) >> 16) | ((bytes[index + 3] & 0xFF) >> 24);
}

E li que quando promovemos o byte para inteiro, o java preenche o restante com 1’s. Aplicando a máscara 0xFF removemos os 1’s, e “juntamos” os bytes em um inteiros usando o operador shift.
O tipo de retorno é long pq eu estouraria o limite positivo de int.
No papel dá certo, porém, quando eu tento converter o valor 255 255 255 255, ele retorna 255 (ao invés de 2^32)!

Alguém têm alguma ideia ?