C ++:在字符串文字中插入负字符值?

时间:2014-08-21 10:52:41

标签: c++ string ascii

我有一个文本渲染器,它使用字符串中的负char值来渲染我制作的字体中的自定义符号,而不是常规的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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

我认为你没有明白在内存中如何表示正负整数。

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

所以我看到两种一般的方法让你进入"否定"字符值:

  • 您可以从另一个扩展ASCII-Charset的字符集中输入字符,并固定为每个字符一个字节,例如" ISO-8859-1&#34 ;.在我看来,当你没有正确设置文件编码时运行介绍故障不是一个好的选择,但这应该可以解决问题。
  • 或者您使用转义序列直接定义字节,例如你输入一些" unsigned char" > = \ x80。

一些参考资料: