用define和varaible-c语言连接数组

用define和varaible-c语言连接数组,c,C,我正在寻找一种解决方案,将defines和variable中的值连接到一个数组中。我已经尝试过这样的memcpy,但它不起作用: #define ADDRESS {0x00, 0x00, 0x00, 0x00, 0x00, 0x45} #define SIGNATURE {0xC6, 0x54, 0x2D} uint8_t packetCounter = 0; uint8_t RadioData[2]={'2','1'}; uint8_t Packet = sizeof(uint8_t);

我正在寻找一种解决方案,将defines和variable中的值连接到一个数组中。我已经尝试过这样的memcpy,但它不起作用:

#define ADDRESS   {0x00, 0x00, 0x00, 0x00, 0x00, 0x45}
#define SIGNATURE {0xC6, 0x54, 0x2D}
uint8_t packetCounter = 0;
uint8_t RadioData[2]={'2','1'};

uint8_t Packet = sizeof(uint8_t);

memcpy(Packet, ADDRESS, sizeof(ADDRESS));
memcpy(Packet, SIGNATURE, sizeof(SIGNATURE));
memcpy(Packet, packetCounter, sizeof(packetCounter));
memcpy(Packet, data, sizeof(data));
这段代码的目标是拥有一个具有以下值的数组:地址+签名+打包计数器+数据。我还想在后面的每个变量之间加上“u”

你有什么解决办法吗?
谢谢

快速简便的方法对我来说很有效。我在调试器中看到数据包中的确切字节

#include <vector>

#define ADDRESS   {0x00, 0x00, 0x00, 0x00, 0x00, 0x45}
#define SIGNATURE {0xC6, 0x54, 0x2D}

uint8_t address[] ADDRESS;
uint8_t signature[] SIGNATURE;
uint8_t packetCounter = 0;
uint8_t RadioData[2] = { '2','1' };

int main() {
    std::vector<uint8_t> packet;

    std::copy(std::begin(address), std::end(address), std::back_inserter(packet));
    std::copy(std::begin(signature), std::end(signature), std::back_inserter(packet));
    packet.push_back(packetCounter);
    std::copy(std::begin(RadioData), std::end(RadioData), std::back_inserter(packet));

    // packet now has the bytes expected
    return 0;
}
#包括
#定义地址{0x00,0x00,0x00,0x00,0x00,0x45}
#定义签名{0xC6,0x54,0x2D}
uint8地址[]地址;
uint8_t签名[]签名;
uint8_t packetCounter=0;
uint8_t无线电数据[2]={'2','1'};
int main(){
std::向量包;
std::copy(std::begin(地址)、std::end(地址)、std::back_插入器(数据包));
std::copy(std::begin(签名)、std::end(签名)、std::back_inserter(数据包));
包。推回(包计数器);
std::copy(std::begin(RadioData)、std::end(RadioData)、std::back_插入器(packet));
//数据包现在具有预期的字节数
返回0;
}

这是C++,虽然问题有两个标签。如果你需要C,我可以很容易地把它们放在一个malloc'ed区域。而且定义完全没有必要。我宁愿只定义静态常量数组


我可能会使用unsigned char或char,如果它们需要8位,可能会使用静态断言。

不完全清楚您想要什么,但可能是这样的

#include <stdint.h>

#define ADDRESS 0x00, 0x00, 0x00, 0x00, 0x00, 0x45
#define SIGNATURE 0xC6, 0x54, 0x2D

void Some_Function(void) {
    uint8_t packetCounter = 0;
    uint8_t RadioData[2]={'2','1'};

    uint8_t Packet[] = {ADDRESS, SIGNATURE, packetCounter, RadioData[0], RadioData[1]};
}
#包括
#定义地址0x00、0x00、0x00、0x00、0x00、0x00、0x45
#定义签名0xC6、0x54、0x2D
void某些函数(void){
uint8_t packetCounter=0;
uint8_t无线电数据[2]={'2','1'};
uint8_t数据包[]={地址、签名、数据包计数器、无线数据[0],无线数据[1]};
}

您的问题是
数据包
是一个整数变量。
memcpy
需要指针,而不是整数变量。您试图将大量字节复制到单个字节位置。

memcpy(数据包,(uint8_t[])地址,sizeof((uint8_t[])地址)。退房但是您的
数据包
定义不好。遗憾的是,我认为这是不可能的。我会使用压缩结构类型来实现它,但是,无论您如何实现,您必须在某处分配足够的内存。@EugeneSh。使用的数组是rVales,所以不工作。C语言-为什么使用C++标签?如果所有的文字都是文字的话,这是一个很好的方法,在这种情况下,应该用和其他一样的方式来做放射数据。然而,我得到的印象是无线数据和其他东西被添加到一个可变大小的数据包中。还不太清楚OP到底需要什么。