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

时间:2017-11-10 20:26:25

标签: c

我正在寻找一个解决方案,在数组中连接来自define和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));

此代码的目标是使用具有这些值的数组:ADDRESS + SIGNATURE + packetCounter + data。我还希望在每个变量之后添加“_”。

你有解决方案吗? 感谢

3 个答案:

答案 0 :(得分:1)

目前还不完全清楚你想要什么,但也许是这样的?

#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]};
}

答案 1 :(得分:0)

快捷方式对我来说很好。我在调试器中看到了数据包中的确切字节。

#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;
}

这是c ++,虽然问题有两个标签。如果你需要C,我可以很容易地将它们放在malloc的区域。而且#define完全没必要。我宁愿定义静态const数组。

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

答案 2 :(得分:0)

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