c-将临时字符数组从for循环复制到另一个数组



我有一个函数,它获取一个const char*数据,并遍历的每个字节进行一些位操作,然后将其添加到另一个char数组中,所以基本上一个字节的输入数据应该是4个字节,2个字节应该是8个字节,依此类推,但我没有得到正确的结果,我不确定我在这里是否正确使用了memcpy,如果有任何帮助,将不胜感激

int encryptDataAndSend(const char *logName, const char *data)
{
const int len = strlen(data);
printf("data length: %d n", strlen(data));
char encryptedData[len * 4];
for (uint8_t i = 0; i < len; i++)
{
uint8_t v1 = 255;
uint8_t v2 = 255;
uint8_t v3 = 255;
uint8_t v4 = 255;
char temp[4] = {0};
printf("char is %d n", data[i]);
v1 |= ((data[i] & (1 << 0)) << 2);
v1 |= ((data[i] & (1 << 1)) << 5);
v2 |= ((data[i] & (1 << 2)) << 2);
v2 |= ((data[i] & (1 << 3)) << 5);
v3 |= ((data[i] & (1 << 4)) << 2);
v3 |= ((data[i] & (1 << 5)) << 5);
v4 |= ((data[i] & (1 << 6)) << 2);
v4 |= ((data[i] & (1 << 7)) << 5);
temp[0] = v1;
temp[1] = v2;
temp[2] = v3;
temp[3] = v4;
printf("temp: %s n", temp);
memcpy(encryptedData, temp, strlen(temp));
}
printf("temp var: %s", encryptedData);
const int txBytes = uart_write_bytes(UART_NUM_2, encryptedData, strlen(encryptedData));
ESP_LOGI(logName, "Wrote %d bytes", txBytes);
ESP_LOG_BUFFER_HEX("SENDDATA_TAG", encryptedData, txBytes);
return txBytes;
}

这就是我如何调用函数

encryptDataAndSend(TX_TASK_TAG, "@BF");

有问题

memcpy(encryptedData, temp, strlen(temp));

As temp可能有也可能没有null字符。因此strlen将是不正确的

也许

memcpy(encryptedData, temp, 4);

是正确的解决方案。

编辑

此外,加密数据需要在循环的每个增量中向前移动

即。

memcpy(encryptedData + 4 * i, temp, 4);

也可能更改

char encryptedData[len * 4];

char encryptedData[len * 4 + 1];

然后

encryptedData[len * 4] = 0;

以确保字符串中有一个null字符!

最新更新