我正在寻找一个解决方案,在数组中连接来自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。我还希望在每个变量之后添加“_”。
你有解决方案吗? 感谢
答案 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
需要一个指针,而不是整数变量。您尝试将大量字节复制到单个字节位置。