0

我对这里的基本 C 事物感到困惑。我有一个 36 字节的缓冲区。我想向该缓冲区写入 3 个数据字节,每个字节从不同的函数接收到 12 个字节。对于简单(可能效率不高)的方式,我所做的是,我采用了 3 个不同的缓冲区,每个缓冲区为 12 个字节。并使用 memcpy() 将数据写入这些缓冲区。然后我使用 strcat 函数将它们放入 35 字节缓冲区。还有其他方法吗?

int main()  
{  
    typedef struct rtc_time_type{  
        int HOUR;  
        int MIN;  
        int SEC;  
    }RTC_TIME_Type;  

    RTC_TIME_Type pCurrentTime;  

    char mainbuff[36], buff1[12], char buff2[12], char buff3[12];  

    memset(mainbuff,0,36);  
    memset(buff1,0,12);  
    memset(buff1,0,12);  
    memset(buff1,0,12);  

    memcpy(buff1, /*int bytes received from some structure*/ pCuurentTime.HOUR);  
    memcpy(buff2, /*int bytes received from some structure*/ pCuurentTime.MIN);  
    memcpy(buff3, /*int bytes received from some structure*/ pCuurentTime.SEC);  

    strcat(mainbuff,buff1);  
    strcat(mainbuff,buff2);  
    strcat(mainbuff,buff3);  

    //send mainbuff on UART  
    UART_Tx_Buff(mainbuff);  

    return 0;  

}  
4

1 回答 1

0

好吧,当然还有另一种方式。

数据似乎不是字符串,而是二进制数据。然后你不能安全地使用与字符串相关的函数strcat(),因为它们期望字符串作为输入(这意味着如果它们看到一个 0 字符,它们就会停止)。

您应该能够memcpy()直接使用到目标缓冲区中的适当位置。

char mainbuff[36];  

memcpy(mainbuff + 0 * 12, pCurrentTime.HOUR, 12);
memcpy(mainbuff + 1 * 12, pCurrentTime.MIN,  12);
memcpy(mainbuff + 2 * 12, pCurrentTime.SEC,  12);

//send mainbuff on UART  
UART_Tx_Buff(mainbuff, 36);

请注意,我在 中添加了缺少的大小参数memcpy(),并且还给出了UART_Tx_Buff()一个大小参数,否则它必须对字符串进行操作,因此不适合此操作。

您没有显示 的​​声明pCurrentTime,因此很难知道语法是否正确。请注意,如果该变量是指针(如前文所述p),则使用点运算符将不起作用。

于 2013-06-04T08:23:58.560 回答