【问题标题】:C++: insert a negative character value into a string literal?C ++:将负字符值插入字符串文字?
【发布时间】:2014-08-21 10:52:40
【问题描述】:

我有一个文本渲染器,它使用字符串中的负字符值以我制作的字体呈现自定义符号,而不是常规的 ascii 文本。

text.write("Hello! _"); // insert a heart at the underscore somehow...
                        // the heart's value is char -10

有没有办法得到一个负的 char 值,静态地写在双引号内?或者有没有办法在引号之外做到这一点,但仍然作为字符串文字?

编辑:

为了澄清一点,不幸的是,在这种特殊情况下,我必须使用 char 数组。代码内部使用std::string,所有正值均采用标准ascii字形。我的目标是能够在字符串文字中注入一个负数来表示额外的符号。所以以下是正确的:

const char * literal = "a literal w/ a negative char value as the 10th element"
literal[9] == -10; // would be true

【问题讨论】:

  • Alt 3 给了你心脏:♥,也许你可以将它存储为一个字符串并用该字符串替换所有 '_' 字符。但是,这取决于您的代码文件的编码是否可行。
  • @invalid_id - 不幸的是,在这种情况下,额外的符号,如心形和东西,不符合任何标准,因为我制作了字体,但很高兴知道! ♥
  • 不确定我是否理解,但您可以使用转义序列:"Hello \u2665"
  • 我认为是\xf5f5 是十六进制的256 - 10)。
  • @Marco - 有没有办法让它成为负数?我会尝试一下 zch 的建议,让我看看

标签: c++ string ascii


【解决方案1】:

你可以写"Hello! \xf6"。 f616 = -10 + 256

这是可行的,因为在 8 位 2 补码整数中,负值 -128 .. -1 与 256 个更大的无符号值 128 .. 255 具有相同的位表示。

【讨论】:

    【解决方案2】:

    我认为您没有理解正整数和负整数在内存中的表示方式。

    每个 "unsigned char" > 127 将被解释为 "signed char"

    所以我看到了两种输入“负”字符值的通用方法:

    • 要么从另一个字符集中输入字符,这些字符扩展了 ASCII 字符集,并且固定为每个字符一个字节,例如“ISO-8859-1”。我认为这不是一个好的选择,因为当文件编码设置不正确时会遇到介绍问题,但这应该可以解决问题。
    • 或者您使用转义序列直接定义字节,例如你输入一些“无符号字符”>= \x80。

    一些参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 2016-01-19
      • 2013-06-22
      相关资源
      最近更新 更多