在c++中为unsigned char添加冒号(:)
Adding a colon (:) to an unsigned char in C++
我正在编写一个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
作为其他答案的解释。
或者,如果您事先不知道大小,您可以使用strlen
和new[]
的组合来分配一个动态大小的缓冲区,进行打印,然后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
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 如何将更多文件夹添加到c++include路径
- 如何将元素添加到数组的线程安全函数?
- QT通过C++添加映射QML项目
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 只能向C++添加一定数量的字符
- Qt和C++:将QLineEdit添加到QTabWidget中
- 将QIcon添加到QTableView单元格
- 为什么我必须在C++中添加一个赋值符号来声明一个数组
- 为什么除非添加括号,否则构造函数上的模板替换会失败?
- 将图像添加到资源文件夹UWP C++
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题