为什么当我有 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。
我想将一个 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。