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