Unexpected results when creating 32-bit int from byte array
The problem is that you are trying to shift uint8_t more than 8 bits and then OR it with int32_t.

You have to cast the uint8_t to int32_t before doing the shift.

void setup()
{
    Serial.begin(9600);
    while(!Serial);
}

void loop()
{
    uint8_t bytes[4] = { 0x00, 0x04, 0x4F, 0x45}; //00044F45
    int32_t theInt = byteArrayToInt32(bytes);
    Serial.println(theInt, HEX); //Print 4F45
    delay(1000);
}

int32_t byteArrayToInt32(uint8_t* bytes)
{
    int32_t i = 0;
    i |= (int32_t) bytes[0] &lt;&lt; 24;
    i |= (int32_t) bytes[1] &lt;&lt; 16;
    i |= (int32_t) bytes[2] &lt;&lt;  8;
    i |= (int32_t) bytes[3];
    return i;
}