use*_*363 4 c++ string carriage-return linefeed
我正在使用 C++ 处理一些 TCP/IP 连接设备的通信。设备要求发送的命令以\r\n 结束。
我正在使用一个配置文件,从中读取通信中使用的命令。
我遇到的问题是命令 \r\n 被解释为它们的 4 个字符,而不是作为回车和换行符。
我曾尝试使用 string.data(),但得到的结果与 string.c_str() 相同。
有没有什么好的功能可以从一开始就让它正确,还是我必须用正常的替换功能来解决这个问题?或者其他一些我没有想过的方式?
我想,如果我没有找到一个非常巧妙的方法来做到这一点,我只会在配置文件中省略 \r\n 并在之后添加它,但是如果没有任何困难,将它全部放在配置文件中会很好编码。我想如果我尝试用正确的字符替换四个字符 \r\n ,我还需要做一些硬编码。
谢谢你的帮助
编辑:配置文件包含这样的行。
MONITOR_REQUEST = "TVT?\r\n"
如果配置文件中的数据需要翻译,则必须进行翻译。缺少正则表达式(这显然是矫枉过正),我不知道有任何标准函数可以做到这一点。我们使用类似的东西:
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;
}
Run Code Online (Sandbox Code Playgroud)
为了这。例如,您可以使用"\\r\\n", "\r\n"for last to 参数调用它。
| 归档时间: |
|
| 查看次数: |
36602 次 |
| 最近记录: |