在c++中为unsigned char添加冒号(:)

Adding a colon (:) to an unsigned char in C++

本文关键字:添加 c++ 中为 unsigned char      更新时间:2023-10-16

我正在编写一个Arduino库,用于在Arduino和使用串行馈送的计算机之间进行简单的数据传输。我创建了库,等等。然而,我有一个字符数组的问题,并添加一个冒号(':')。也就是说,

//Sends data via println()
void simpleTransfer::sendData(char *name, char *data){
    char *str = name + ": " + data + ",";
    _serial->println(str); //Sends in form 'name: data,'
}

这应该接受我想要发送的变量名,添加冒号和空格,以及我想要发送的数据,最后是逗号。但是,我得到的却是错误消息:

将'char*'和'const char[3]'类型的操作数转换为二进制'operator+'无效

原因是什么?

简短的回答:使用std::string创建连接字符串。

 std::string s = ((std::string(name) + ": ") + data) + ",";
_serial->println( s.c_str() );

长答案:当连接c风格的字符串时,你需要一个足够大的目标缓冲区来保存结果。如果您知道结果可能达到的最大大小,则可以声明该大小的局部数组,并使用sprintf作为其他答案的解释。

或者,如果您事先不知道大小,您可以使用strlennew[]的组合来分配一个动态大小的缓冲区,进行打印,然后delete[]来分配缓冲区。但是不要这样做!使用字符串类代替,要么std::string,要么Drew Dormann在下面的评论中提到,一个Arduino特定的String类。

你可以使用sprintf:

char str[64];  // Or whatever length you need to fit the resulting string
sprintf(str, "%s:%s,", name, data);

或拷贝字符串/strcat:

char str[64];
strcpy(str, name);
strcat(str, ":");
strcat(str, data);
strcat(str, ",");


或者直接使用c++的std::string