所以我目前正在开发项目,我需要制作一个十六进制数组,稍后通过串行发送。这个十六进制数组有一些固定部分,例如它总是以 F0 开头,但在中间我需要有可变数据。向此十六进制数组添加变量的最简单方法是什么?
这是我想要做的一个粗略示例:
F0 (2 byte long variable) (1 byte variable) (4 byte long variable) 0F
示例:
F0 00 01 FF 00 00 00 01 0F
所以理想情况下,这是我正在寻找的东西:
unsigned char data[] = {0xF0,Data1,Data2,Data3,0x0F};
您可以使用
memcpy()
函数复制变量中的数据。
#include <stdio.h> /* printf */
#include <string.h> /* memcpy */
#include <stdint.h> /* uint8_t, uint16_t, uint32_t */
int main(void) {
/* prepare data */
/* assuming little endian */
uint16_t Data1 = UINT16_C(0x0100);
uint8_t Data2 = UINT8_C(0xff);
uint32_t Data3 = UINT32_C(0x01000000);
/* copy data */
unsigned char data[1 + 2 + 1 + 4 + 1];
data[0] = 0xf0;
memcpy(data + 1, &Data1, 2);
memcpy(data + 3, &Data2, 1);
memcpy(data + 4, &Data3, 4);
data[8] = 0x0f;
/* check data */
for (int i = 0; i < 9; i++) {
printf("%02X ", data[i]);
}
putchar('\n');
return 0;
}