C++ 字符串中的回车符和换行符
C++ Carriage return and line feed in a string
我正在C++处理一些TCP/IP连接设备的通信。设备要求发送的命令以 \r 结尾。
我正在使用一个配置文件,从中读取通信中使用的命令。
我遇到的问题是命令\r被解释为它们的4个字符,而不是回车符和换行符。
我尝试使用 string.data((,但我得到的结果与 string.c_str(( 相同。
有什么好的功能可以从一开始就正确使用它,还是我必须使用普通的替换函数来解决这个问题?还是其他我没有想到的方式?
我想,如果我没有找到一种非常简洁的方法,我将省略配置文件中的\r,然后添加它,但是最好将其全部放在配置文件中而无需任何硬编码。我想如果我尝试将四个字符\r替换为正确的字符,我也需要进行一些硬编码。
感谢您的任何帮助
编辑:配置文件包含类似这样的行。
MONITOR_REQUEST = "TVT?\r">
如果配置文件中的数据需要转换,则必须翻译它。 缺少正则表达式(它们是显然矫枉过正(,我不知道任何标准函数可以做到这一点。 我们使用类似的东西:
std::string
globalReplace(
std::string::const_iterator begin,
std::string::const_iterator end,
std::string const& before,
std::string const& after )
{
std::string retval;
std::back_insert_iterator<std::string> dest( retval );
std::string::const_iterator current = begin;
std::string::const_iterator next
= std::search( current, end, before.begin(), before.end() );
while ( next != end ) {
std::copy( current, next, dest );
std::copy( after.begin(), after.end(), dest );
current = next + before.size();
next = std::search( current, end, before.begin(), before.end() );
}
std::copy( current, next, dest );
return retval;
}
为此。 您可以使用 "\r\n", "rn"
为例如,最后是参数。
听起来你的配置文件实际上包含 4 个不同的字符''
、'r'
、''
和 'n'
...您必须更改文件(例如,通过使用文件中的实际行尾对字符串中的行尾进行编码,即使这样,某些系统也不会碰巧使用 \r 作为其文本文件行分隔符(,或者按照您的建议进行一些替换/转换。 翻译是更便携的方法。 它也可以非常快...只需在字符串中维护两个指针/迭代器/索引 - 一个用于读取位置,一个用于写入,并在压缩转义符号的同时复制。
你不需要在代码中有任何代码。您可以很好地从同一配置文件中读取要附加到传出字符串的字符。
假设您的 conf 文件中有名称值对:
APPEND_EOL="\r"str_to_send1="这是一个测试%%%APPEND_EOL%%">
在发送前解析行时,您可以生成实际行。如果您无法将APPEND_EOL存储在同一行中,那么您可以使用默认值从 ENV 中获取它,以防它未定义,或者,可能在您的另一个配置文件中。
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- Clang-格式:在多行语句之后的换行符上打开大括号
- 在输出流中插入换行符
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- QProcess::readAllStandardOutput() 和换行符
- 如果有换行符,clang 格式不会附加大括号
- 提取后返回换行符的C++istream.get()
- 如何在出现换行符之前将多个整数作为输入?
- 正则表达式 获取两个换行符之间的文本
- 包含换行符分隔的单词的文件和C++中这些单词的字符串向量的大小是否相同?
- 在字符串中输入换行符
- 从文本文件中读取数据并删除所有换行符空格,并在 C++ 控制台中显示
- 使用 fgets() 从键盘读取时从以前的输入读取换行符
- 程序找不到回车符或换行符。退货超出范围
- 使用boost::regex时,如何指定回车符和换行符匹配
- C++ 字符串中的回车符和换行符