在C++中,如何将负字符值插入字符串字面量?

3

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

Alt 3 给你的是心形符号:♥,也许你可以将其存储为字符串并将所有“_”字符替换为该字符串。然而,这取决于代码文件的编码是否支持。 - invalid_id
@invalid_id - 额外的符号,比如心形之类的,在这种情况下不幸的是并没有对应任何标准,因为我是制作字体的人,但这也是一个好的知识点!♥ - Anne Quinn
3
ТѕЉУ«цСИ║т«ЃТў»\xf5№╝ѕf5Тў»тЇЂтЁГУ┐ЏтѕХуџё256-10№╝Ѕсђѓ - zch
zch - 你提出的建议实际上很有效!不过我在想,我能否依赖这种溢出行为。如果它只影响编译机器,那对我来说就足够了。 - Anne Quinn
'\xf5' 是一个 char,如果你的系统中 plain char 被定义为有符号(并且是 8 位),那么这个结果就是实现定义的,但很可能会是一个负数字符。 - M.M
显示剩余6条评论
2个回答

4
你可以编写"你好!\xf6"。f616=-10+256。
这样做是因为在8位二进制补码整数中,负值-128 .. -1与256个更大的无符号值128 .. 255具有相同的位表示。

1
我认为您没有理解正负整数在内存中的表示方式。
每个“无符号字符” > 127 将被解释为“有符号字符”<0,即当您使用不在ASCII集合中的字符并将其解释为有符号字符时,它们会自动变成负数。
因此,我认为您可以采取两种方法来输入“负”字符值:
要么输入另一个字符集中的字符,该字符集扩展了ASCII字符集,并且每个字符固定为一个字节,例如“ISO-8859-1”。在我的意见中,这不是一个好选择,因为当文件编码未正确设置时,会遇到麻烦,但应该可以解决问题。
要么使用转义序列直接定义字节,例如输入一些“无符号字符”> = \x80。
以下是一些参考资料:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接