Arduino:union/struct属性返回错误的值

Arduino:union/struct属性返回错误的值,c,memory,struct,arduino,unions,C,Memory,Struct,Arduino,Unions,我试图用一个union和struct来表示一个32位的信号,这个信号将通过433Mhz的无线电发射机发送。我无法让Arduino在signal.parts.remote属性上存储26位远程id。当我将值设置为23607301(十进制)后获取该值时,取而代之的是14341(十进制)。我应该如何构造此联合以使其返回正确的值 信号h union signal_union { struct { unsigned unit :2; unsigned ch

我试图用一个union和struct来表示一个32位的信号,这个信号将通过433Mhz的无线电发射机发送。我无法让Arduino在signal.parts.remote属性上存储26位远程id。当我将值设置为23607301(十进制)后获取该值时,取而代之的是14341(十进制)。我应该如何构造此联合以使其返回正确的值

信号h

union signal_union
{
    struct
    {
        unsigned unit   :2;
        unsigned channel:2;
        unsigned status :1;
        unsigned group  :1;
        unsigned remote :26;
    } parts;
    unsigned long data;
};

typedef union signal_union Signal;
structtest.ino

#include "Signal.h"

Signal signal1;
Signal signal2;

void testPassingStruct(Signal *variable)
{
    variable->parts.status = 1;

    Serial.print("Unit: ");
    Serial.println(variable->parts.unit);
    Serial.println("Should be: 2");
    Serial.println("");
    Serial.print("Status: ");
    Serial.println(variable->parts.status);
    Serial.println("Should be: 1");
    Serial.println("");
    Serial.print("Remote: ");
    Serial.println(variable->parts.remote);
    Serial.println("Should be: 23607301");
    Serial.println("");
    Serial.print("Data: ");
    Serial.println(variable->data, BIN);
    Serial.println("Should be: 01011010000011100000000101110010");
    Serial.println("");
}

void setup() 
{
    Serial.begin(115200);

    signal1.parts.remote = 23607301;
    signal1.parts.unit = 2;
    signal1.parts.group = 1;
    testPassingStruct(&signal1);
}

void loop() 
{
}
输出(来自Arduino):


这是一个关于的后续问题,我怀疑问题与
unsigned
(又称
unsigned int
)的宽度为16位有关。尝试将
remote
字段更改为
unsigned long

unsigned long remote :26;

谢谢你这么做了,一旦你知道了就这么简单了!:)十六进制计算器是你的朋友。14341=0x3805,23607301=0x1683805。当您查看数字时,请尝试查看它们的十六进制表示形式。有时,它有助于发现此类问题。谢谢,这让它更清楚了!:)
unsigned long remote :26;