3

如何使用字符的十进制/十六进制表示而不是实际字符来创建字符数组。

我问的原因是因为我正在编写 C 代码,并且我需要创建一个包含英语中未使用的字符的字符串。然后该字符串将被解析并显示到 LCD 屏幕上。

例如,'\0' 解码为 0,'\n' 解码为 10。我可以牺牲这些特殊字符来显示自定义字符吗?我可以发送“温度为 10\d C”并打印度数符号而不是“\d”。像这样的东西会很棒。

4

5 回答 5

6

假设您的显示器上有一个作为度数符号的字符代码(使用自定义显示器,我不一定希望它在扩展 IBM ASCII 字符集中的常见位置“存在”,或者显示器支持 Unicode 字符encoding) 那么您可以使用编码\nnnor \xhh,其中 nnn 最多为八进制(以 8 为基数)的三位数字,或者 hh 最多为两位十六进制代码。不幸的是,没有可用的十进制编码 - Dennis Ritchie 和/或 Brian Kernighan 可能更习惯于使用八进制,因为这在 C 最初开发时很常见。

例如

 char *str = "ABC\101\102\103";
 cout << str << endl;

应该打印ABCABC(假设 ASCII 编码)

于 2013-08-12T10:12:20.440 回答
1

用于\u00b0制作学位标志(我只是查找了它的 unicode 代码)

这需要终端中的 unicode 支持。

于 2013-08-12T10:05:36.060 回答
1

可以直接写

char myValues[] = {1,10,33,...};
于 2013-08-12T10:02:47.563 回答
0

更多的研究,我找到了我自己问题的答案。

'\' 后面的字符称为转义序列。

您可以通过使用从'\000' 到'\777' 的转义序列将八进制等效的ascii 放入字符串中。

十六进制也是如此,“x00”到“xFF”。

我使用“xC1”到“xC8”打印我的自定义字符,因为我只有 8 个自定义字符。

每件事都在一行代码中完成:lcd_putc("Degree \xC1")

于 2013-08-12T10:13:32.380 回答
0

角色的简单、使用std::ostringstream和铸造:

std::string s = "hello world";

std::ostringstream os;
for (auto const& c : s)
    os << static_cast<unsigned>(c) << ' ';

std::cout << "\"" << s << "\" in ASCII is \"" << os.str() << "\"\n";

印刷:

ASCII 中的“你好世界”是“104 101 108 108 111 32 119 111 114 108 100”
于 2013-08-12T10:01:49.197 回答