将以 null 结尾的字节字符串转换为原始字符串文本



免责声明:我最近才开始使用C++,我仍在尝试理解它的基本概念。

例如,我们必须遵循以下语句:

std::cout << "^\s+Encryption key:(\w+)"        << 'n' << 
"^\s+Quality=(\d+)"               << 'n' <<
"^\s+E?SSID:"([[:print:]]+)""    << 'n' <<
"^\s+ssid="([[:print:]]+)""      << 'n';

如何将其转换为单个原始字符串文本?我试图尽可能多地阅读有关此主题的信息,但似乎无法弄清楚如何做到这一点。谁能指出我正确的方向?

我知道)"不能直接在 RSL 中使用。

可以在原始字符串文本中使用()。您只需指定开始/停止分隔符序列,这样您就不会在字符串中获得前面带有)的分隔符序列。始终附加空字符。有关详细信息,请参阅 cppreference 字符串文本文档。

在下面的示例中,###是分隔符,但您可以选择所需的任何字符(不允许使用这些字符:() ,并且长度必须为 16 个字符或更少(。只需选择不会导致您意外过早终止文字的内容即可。

使用###作为分隔符,编译器将继续使用文本作为原始字符串文本的一部分,直到涉及到组合)###",所以从技术上讲,您可以在文本中)###而不终止原始字符串文字,但我认为最好谨慎行事——如果碰巧在该序列之后立即出现",您可能会无意中过早终止文字。我还可以避免在文字正文中(后跟分隔符的情况 -###(在本例中。这是允许的,但可能会使阅读该程序的人感到困惑。

所以这可能是

std::cout << R"###(^s+Encryption key:(w+)
^s+Quality=(d+)
^s+E?SSID:"([[:print:]]+)"
^s+ssid="([[:print:]]+)"
)###"  ;

在原始字符串文本中,您不会转义字符,因此在您的示例中\"变为",并且n成为实际的换行符。

最新更新