为什么当我有 0x00 时我的数据被切断了?

Why does my data is cut when I have 0x00?

我想将一个 uint8_t 数组复制到一个 uint8_t 指针

uint8_t temp_uint8_array[] = {0x15, 0x25, 0x32, 0x00, 0x52, 0xFD};

uint8_t* Buffer = temp_uint8_array;

现在:

Buffer = {0x15, 0x25, 0x32};

所以我明白我的数据是因为0x00被截断了,有解决办法吗?


因为我可以访问要复制的数据的大小,所以我尝试使用

memcpy(Buffer, &temp_uint8_array, local_length);

但是不行

uint8_t temp_uint8_array =不是数组而是语法错误。

So I understand that my data is cut because of 0x00

不,不是。如果您尝试将数据解释为字符串,则 0x00 将被视为空终止符。但这不是字符串。

is there a solution

不把原始数据当成字符串? memcpy 会很好地工作。

But it does not work

什么 不起作用? local_length 是什么,你从哪里得到的?

好的,实际上是我的 IDE 中的变量查看器削减了我的变量值,所以我只能看到 0x00 之前的值,但在内存中数据已被复制。

可能它被解释为字符串,所以它显示直到空终止符的值。

要知道我必须用调试器检查我的 mcu 内存中发生了什么。

memcpy 不正确:

memcpy(Buffer, &temp_uint8_array, …

因为 temp_uint8_array 是一个数组,所以你不应该在它前面加上 & :

memcpy(Buffer, temp_uint8_array,…

缓冲区指向 temp_iint8_array 因此 memcpy 除了擦除同一内存位置中的字节外什么都不做。您 IDE 可能认为 uint8 数组可以作为 char 字符串处理并显示内容直到 0x00。