Shouldn't the last term be buffer[3] << 24 ?
making it: 
*value = buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3] << 24)