在字符串字面量中插入一个负字符值
C++: insert a negative character value into a string literal?
我有一个文本渲染器,它使用来自字符串的负字符值以我制作的字体呈现自定义符号,而不是常规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
相关文章:
- 使用.find函数在c++中查找字符和另一个字符之间的大小
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 使用动态分配将 char* 复制到另一个字符**
- 如何将一个结构的字符数组复制到结构的另一个字符数组中?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 如何检查一个字符是否与字符数组中的另一个字符匹配?
- C++:使用另一个字符将一个字符大写
- 我可以得到一个字符 * 到一个 std::sregex_iterator 匹配 str() 吗?
- 使用连续分隔符和空最后一个字符进行拆分
- 如何比较文件中包含的下一个字符
- 如何检查字符串中的最后一个字符是否是某个字符并将其从字符串中删除?(C++)
- 如何从文本文件中一次读取一个字符
- 将一个字符替换为字符串中更多数量的字符,而不删除C++中的其他字母
- 读取输入后,输出丢失了一个字符
- 比较最后一个字符,不区分大小写(带谓词?
- 如果一个字符,比如说"9",我减去"0",我在结果上使用 is 数字,我是真还是假
- 为什么 std::istream::gcount 返回的字符比预期的多一个字符
- 使用 fstream 在空格分隔文件中查看下一项(不仅仅是一个字符)的方法
- 使用 char 将一个字符数组分配给另一个字符数组时出现奇怪的行为
- 在弦乐器中删除最后一个字符