【问题标题】:Limit the Length of a Hexadecimal Escape Sequence in a C-String [duplicate]限制 C 字符串中十六进制转义序列的长度
【发布时间】:2016-02-03 15:03:50
【问题描述】:

在字符串文字中,如何立即使用可以解释为十六进制数字的文字字符跟随十六进制转义序列?例如,如果我写这个文字......

"BlahBlah\x04BlahBlah"

...紧跟在'4' 之后的'B' 将被解释为十六进制转义的一部分,因为它是一个有效的十六进制数字。

如果'4' 被视为十六进制转义的最后一个字符,我如何编写一个字符串文字来表示上面将表示的字符串?

【问题讨论】:

  • 请展示您的研究成果。请先阅读How to Ask页面。
  • 您可能想使用文字 "BlahBlah\x04" "BlahBlah"。编译器将此视为单个字符串,但转义序列在 4 处停止。
  • "C 将字符串中 '\x' 后面的所有字符视为十六进制数字" 使用哪个函数、运算符等等?就目前而言,它是一个“字符串”字面量,并被视为这样,而不是一个十六进制值。
  • @alk 他显然指的是字符串文字中的十六进制转义序列,如果您阅读问题中的代码,您可以看到。

标签: c string


【解决方案1】:

正如您所注意到的,当涉及到字符串文字中的十六进制转义序列时,C 非常愚蠢。通过使用字符串连接来修复它,如下所示:

"BlahBlah\x04" "BlahBlah"

最好不要在这样的十六进制转义序列后面有任何尾随字符。始终像本例一样结束字符串。

【讨论】:

  • 赞成,但在那个翻译阶段我不会真正称它为 预处理器。
  • @user694733 嗯,没错,这将与## 混淆,我相信它正式命名为“预处理器连接”。我会编辑。
  • (对于那些对翻译阶段不感兴趣的人,预处理显然是第 4 阶段,十六进制转义序列在第 5 阶段转换,字符串文字连接在第 6 阶段完成。这实际上解释了为什么这个技巧有效。请参阅 5.1.1.2 翻译阶段。在那里,我也学到了一些新东西!)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-31
  • 2020-03-22
  • 1970-01-01
  • 2020-01-04
  • 2016-06-02
  • 1970-01-01
相关资源
最近更新 更多