I'm using Raspberry Pi and Arduinos for my home automation project where Raspi is controler of Arduino nodes.
I use nRF24 wireless transceiver to communicate these two.

My problem is that when I was sending a structure like following

    struct TempSensorData
    {
        uint32_t result;
        uint32_t temperature;
        uint32_t humidity;
    };
from Raspberry to Raspberry everything went fine but now when I use Arduino as sender I get very strange results:

    received: status: 335544320, temperature: 754974720 degrees, humidity: 0%

while on Raspberry it was

    received: status: 0, temperature: 22 degrees, humidity: 44%

**Can this be a problem with types?** 

Or with different type of architecture (like different sizes on 32bit and 64bit arch)?

EDIT:

code on Raspberry:

    if (radio.available())
    {
        // dump the payloads until we've got everything
        Message receivedData = {0};
        radio.read(&receivedData, sizeof(Message));
        TempSensorData data = receivedData.msgData.tempSensorData;
        std::cout << "received: status: " << data.result << ", temperature: " << data.temperature << " degrees, humidity: " << data.humidity << "%" << std::endl; //TODO here we have some strange numbers - check if we have proper types
    }

before that I have:

    radio.begin();

    radio.setPALevel(RF24_PA_LOW);
    radio.setChannel(0x4c);

    radio.openReadingPipe(1, RASPI_READ_ADDR);
    radio.openWritingPipe(RASPI_WRITE_ADDR);

    radio.enableDynamicPayloads();
    radio.setAutoAck(true);
    radio.powerUp();
    radio.startListening();

and on Arduino

    Header header = {thisNodeId, thisNodeType, 0, static_cast<uint8_t>(MsgType::TEMP_SENSOR_DATA), 12345, Status::ok};

    TempSensorData dhtData;
    dhtData.result = DHT.read11(DHT11_PIN);
    dhtData.humidity = (int)DHT.humidity;
    dhtData.temperature = (int)DHT.temperature;


    Message message = {0};
    message.header = header;
    message.msgData.tempSensorData = (dhtData);

    radio.stopListening();
    radio.write(&message, sizeof(message));
    radio.startListening();

I also use common header with defined structures for both Arduino and Raspberry which contains:

    #define RASPI_WRITE_ADDR 0xF0F0F0F0F0LL
    #define RASPI_READ_ADDR 0xF0F0F0F0E1LL

    struct TempSensorData
    {   
        uint32_t result;
        uint32_t temperature;
        uint32_t humidity;
    };  

    enum class Status : uint8_t
    {   
        ok,
        error,
        fail
    };

    enum class MsgType : uint8_t
    {
        INITIALIZATION,
        RESET_REQUEST,
        ACK_NACK,
        TEMP_SENSOR_DATA,
    };

    struct Header
    {
        uint8_t nodeId;
        uint8_t nodeType;
        uint8_t location;
        uint8_t msgType;
        uint16_t checksum;
        Status status;
    };

    union MsgData
    {
        InitMsgData initMsgData;
        AckNack ackNack;
        TempSensorData tempSensorData;
    };

    struct Message
    {
        Header header;
        MsgData msgData;
    };

radio is an item of RF24 class from https://github.com/TMRh20/RF24/

Unfortunately RF24 repo is 64 commits ahead of what I use..

**EDIT2:**

Maybe the problem lays in that 

    enum class Status {};

which I use in both files.

I must add that I use g++-4.7 when compiling on Raspberry and when compiling on Arduino I use avr-g++-4.8.2