【问题标题】:std::string control characters: assigning a hex number to a string [duplicate]std::string 控制字符:将十六进制数字分配给字符串 [重复]
【发布时间】:2014-08-22 16:42:57
【问题描述】:

转义字符的行为是否依赖于编译器?

std::string pattern = "\xDDAF5742"; // or do pattern("\xDDAF5742");
std::cout << pattern << " " << pattern.size() << "\n";

在我的系统上,这会输出 B 1 ('B' == 0x42),但我认为它应该将 4 个字符放入字符串中。

【问题讨论】:

标签: c++ string escaping hex std


【解决方案1】:

你想要这个:

std::string pattern = "\xDD\xAF\x57\x42"; 

否则,它会尝试将整个十六进制代码读取为一个字符,然后将其截断为仅最后 8 位。

【讨论】:

  • 好的,因为我在stackoverflow.com/a/10220539/574733 的评论中读到,您可以按照我上面的方式进行操作。我猜他错了,即使他得到了 9 票?或者,尽管如此,我可能只是误解了。
  • @MattMunson 该评论属实。它声明它读取个字符直到第一个非十六进制值,而不是解释。这是一个很大的区别:)
  • “只截断到最后 8 位”是实现定义的(“转义 \xhhh 由反斜杠后跟 x 后跟一个或多个用于指定值的十六进制数字组成所需字符的字符。对十六进制序列中的位数没有限制。八进制或十六进制数字序列分别以不是八进制数字或十六进制数字的第一个字符终止。字符的值如果字面量超出为 char... 定义的实现定义范围,则字面量是实现定义的)
猜你喜欢
  • 2012-03-25
  • 2014-10-30
  • 2015-03-09
  • 2011-05-15
  • 2013-05-06
  • 2013-01-09
  • 2012-09-25
  • 2012-11-09
相关资源
最近更新 更多