在字符串字面量中插入一个负字符值

C++: insert a negative character value into a string literal?

本文关键字:一个 字符 字符串 插入      更新时间:2023-10-16

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

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

是否有一个负的字符值,静态地写在双引号内?或者是否有一种方法可以在引号之外做到这一点,但仍然作为字符串字面值?

编辑:

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

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

可以写"Hello! xf6"。F6 16 = -10 + 256

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

我想你还没有明白内存中正整数和负整数是如何表示的。

每个"unsigned char"> 127将被解释为"signed char" <0,即当您使用不在ASCII-Set中的字符并将其解释为带符号字符时,它们将自动为负数。

所以我看到了两种输入"负"字符值的一般方法:

  • 您可以从扩展ascii字符集的另一个字符集输入字符,并且每个字符固定为一个字节,例如:"iso - 8859 - 1"。在我看来,当文件编码设置不正确时,当您运行介绍麻烦时,这不是一个好的选择,但这应该可以解决问题。
  • 或者你使用转义序列直接定义字节,例如你输入一些"unsigned char">= x80。

给你的参考资料:

  • http://upload.wikimedia.org/wikipedia/de/5/5c/Zahlenkreis_sint3.jpg
  • http://en.wikipedia.org/wiki/Integer_%28computer_science%29
  • http://www.joelonsoftware.com/articles/Unicode.html
相关文章: