Char to uint8 微控制器解释不正确?

Char to uint8 incorrect on microcontroller explanation?

我正在做一个关于 SAME70 微控制器的项目。我需要将 char 转换为 uint8_t。我正在验证它是否正确执行此操作。

我注意到当我 运行 这段代码打印出最终产品时:

char test[] = "hey this is a message from the MCU which I can make as large as I want it to be";

int main ( void )
{
    /* Initialize all modules */
    SYS_Initialize ( NULL );
    USART1_Write((uint8_t*)test, sizeof((uint8_t*)test));
}

打印出来的数据不正确。只打印第一个单词“hey”。但是,如果我这样做:

char test[] = "hey this is a message from the MCU which I can make as large as I want it to be";
uint8_t test2[79];
int sizedata = 0;

int main ( void )
{
    /* Initialize all modules */
    SYS_Initialize ( NULL );
    sizedata = sizeof(test);
    memcpy(test2,test,sizedata);
    USART1_Write(test2, sizeof(test2));

转换工作正常,所有内容都打印出来了。在这两种情况下,我都给了它与输入相同的类型,所以在我看来转换没有正确发生。有谁知道我在这里做错了什么?

sizeof((uint8_t*)test) 是错误的。这是一个指针的大小uint8_t*。您应该改为传递数组的大小 sizeof(test)

还有

uint8_t test2[79];

sizedata = sizeof(test);
memcpy(test2,test,sizedata);

错了。数组 test 中的字符串长度为 79 个字符,因此数组有 80 个元素,包括终止空字符,因此 sizeof(test) 为 80。另一方面,目标 test2只有 79 个字节。因此,此 memcpy 执行危险的超出范围的访问。

你应该使用

uint8_t test2[sizeof(test)];

相反。或者如果你更喜欢使用幻数(我不推荐这个),你应该写

sizedata = 79;

而不是

sizedata = sizeof(test);