#include <stdio.h>
#include <stdint.h>
#include <string.h>
// Function to copy data from a const char* to a uint8_t* buffer
// buff[0] = data_length, buff[1..length] = actual data
void copy_data_to_buffer(const char *data, uint8_t *buff, size_t buff_size) {
// Calculate the length of the input data
size_t data_length
= strlen(data
);
// Ensure the buffer is large enough to hold the length byte + data + null terminator (if needed)
if (data_length + 1 > buff_size) {
printf("Error: Buffer is too small to hold the data and length.\n"); return;
}
// Store the length in buff[0]
buff[0] = (uint8_t)data_length;
// Copy the data into buff[1..length]
memcpy(&buff
[1], data
, data_length
);
// Optionally, null-terminate the buffer (if needed)
buff[5 + 1] = '\0';
}
int main() {
const char *data = "Hello"; // Example input data
uint8_t buff[6]; // Buffer to hold the length and data
// Copy the data into the buffer
copy_data_to_buffer(data, buff, sizeof(buff));
// Print the length and copied data
printf("sizeof(buff)=%d\n",sizeof(data
)); printf("Data length: %d\n", buff
[6]); printf("Copied data: %s\n", (char *)&buff
[1]);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRpbnQuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKLy8gRnVuY3Rpb24gdG8gY29weSBkYXRhIGZyb20gYSBjb25zdCBjaGFyKiB0byBhIHVpbnQ4X3QqIGJ1ZmZlcgovLyBidWZmWzBdID0gZGF0YV9sZW5ndGgsIGJ1ZmZbMS4ubGVuZ3RoXSA9IGFjdHVhbCBkYXRhCnZvaWQgY29weV9kYXRhX3RvX2J1ZmZlcihjb25zdCBjaGFyICpkYXRhLCB1aW50OF90ICpidWZmLCBzaXplX3QgYnVmZl9zaXplKSB7CiAgICAvLyBDYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiB0aGUgaW5wdXQgZGF0YQogICAgc2l6ZV90IGRhdGFfbGVuZ3RoID0gc3RybGVuKGRhdGEpOwoKICAgIC8vIEVuc3VyZSB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBsZW5ndGggYnl0ZSArIGRhdGEgKyBudWxsIHRlcm1pbmF0b3IgKGlmIG5lZWRlZCkKICAgIGlmIChkYXRhX2xlbmd0aCArIDEgPiBidWZmX3NpemUpIHsKICAgICAgICBwcmludGYoIkVycm9yOiBCdWZmZXIgaXMgdG9vIHNtYWxsIHRvIGhvbGQgdGhlIGRhdGEgYW5kIGxlbmd0aC5cbiIpOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBTdG9yZSB0aGUgbGVuZ3RoIGluIGJ1ZmZbMF0KICAgIGJ1ZmZbMF0gPSAodWludDhfdClkYXRhX2xlbmd0aDsKCiAgICAvLyBDb3B5IHRoZSBkYXRhIGludG8gYnVmZlsxLi5sZW5ndGhdCiAgICBtZW1jcHkoJmJ1ZmZbMV0sIGRhdGEsIGRhdGFfbGVuZ3RoKTsKCiAgICAvLyBPcHRpb25hbGx5LCBudWxsLXRlcm1pbmF0ZSB0aGUgYnVmZmVyIChpZiBuZWVkZWQpCiAgICBidWZmWzUgKyAxXSA9ICdcMCc7Cn0KCmludCBtYWluKCkgewogICAgY29uc3QgY2hhciAqZGF0YSA9ICJIZWxsbyI7ICAvLyBFeGFtcGxlIGlucHV0IGRhdGEKICAgIHVpbnQ4X3QgYnVmZls2XTsgIC8vIEJ1ZmZlciB0byBob2xkIHRoZSBsZW5ndGggYW5kIGRhdGEKCiAgICAvLyBDb3B5IHRoZSBkYXRhIGludG8gdGhlIGJ1ZmZlcgogICAgY29weV9kYXRhX3RvX2J1ZmZlcihkYXRhLCBidWZmLCBzaXplb2YoYnVmZikpOwoKICAgIC8vIFByaW50IHRoZSBsZW5ndGggYW5kIGNvcGllZCBkYXRhCiAgICBwcmludGYoInNpemVvZihidWZmKT0lZFxuIixzaXplb2YoZGF0YSkpOwogICAgcHJpbnRmKCJEYXRhIGxlbmd0aDogJWRcbiIsIGJ1ZmZbNl0pOwogICAgcHJpbnRmKCJDb3BpZWQgZGF0YTogJXNcbiIsIChjaGFyICopJmJ1ZmZbMV0pOwoKICAgIHJldHVybiAwOwp9