首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将以空结尾的字节字符串转换为原始字符串文本

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

Stack Overflow用户
提问于 2018-09-14 20:06:33
回答 1查看 179关注 0票数 0

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

例如,我们必须声明如下:

代码语言:javascript
运行
复制
std::cout << "^\\s+Encryption key:(\\w+)"        << '\n' << 
             "^\\s+Quality=(\\d+)"               << '\n' <<
             "^\\s+E?SSID:\"([[:print:]]+)\""    << '\n' <<
             "^\\s+ssid=\"([[:print:]]+)\""      << '\n';

如何将其转换为单个原始字符串文字?我试着尽可能多地阅读这个主题,但似乎想不出该怎么做。有人能指出我的正确方向吗?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-14 20:21:30

您可以在原始字符串文本中使用()。您只需指定开始/停止分隔符序列,这样就不会在字符串中得到一个带)的分隔符序列。空字符总是附加在后面。详情请参见cppreference首选项字符串文字文档

在下面的示例中,###是分隔符,但是您可以任意选择(除非这些字符是不允许的:() \,长度必须是16个字符或更少)。只需选择一些不会导致您意外提前终止文字的内容。

使用###作为分隔符,编译器将继续使用文本作为原始字符串文字的一部分,直到出现组合)###"为止,因此从技术上讲,您可以在文本中使用)###而不终止原始字符串文本,但我认为最好安全地使用它--如果在该序列之后恰好有一个",您可能会无意中过早地终止该文本。我还避免了在本例中的文本- (正文中有分隔符后面跟着###(的情况。这是允许的,但可能会让阅读节目的人感到困惑。

所以这可能是

代码语言:javascript
运行
复制
std::cout << R"###(^\s+Encryption key:(\w+)
^\s+Quality=(\d+)
^\s+E?SSID:"([[:print:]]+)"
^\s+ssid="([[:print:]]+)"
)###"  ;

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52338617

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档