如何使用字符的十进制/十六进制表示而不是实际字符来创建字符数组。
我问的原因是因为我正在编写 C 代码,并且我需要创建一个包含英语中未使用的字符的字符串。然后该字符串将被解析并显示到 LCD 屏幕上。
例如,'\0' 解码为 0,'\n' 解码为 10。我可以牺牲这些特殊字符来显示自定义字符吗?我可以发送“温度为 10\d C”并打印度数符号而不是“\d”。像这样的东西会很棒。
如何使用字符的十进制/十六进制表示而不是实际字符来创建字符数组。
我问的原因是因为我正在编写 C 代码,并且我需要创建一个包含英语中未使用的字符的字符串。然后该字符串将被解析并显示到 LCD 屏幕上。
例如,'\0' 解码为 0,'\n' 解码为 10。我可以牺牲这些特殊字符来显示自定义字符吗?我可以发送“温度为 10\d C”并打印度数符号而不是“\d”。像这样的东西会很棒。
假设您的显示器上有一个作为度数符号的字符代码(使用自定义显示器,我不一定希望它在扩展 IBM ASCII 字符集中的常见位置“存在”,或者显示器支持 Unicode 字符encoding) 那么您可以使用编码\nnn
or \xhh
,其中 nnn 最多为八进制(以 8 为基数)的三位数字,或者 hh 最多为两位十六进制代码。不幸的是,没有可用的十进制编码 - Dennis Ritchie 和/或 Brian Kernighan 可能更习惯于使用八进制,因为这在 C 最初开发时很常见。
例如
char *str = "ABC\101\102\103";
cout << str << endl;
应该打印ABCABC
(假设 ASCII 编码)
用于\u00b0
制作学位标志(我只是查找了它的 unicode 代码)
这需要终端中的 unicode 支持。
可以直接写
char myValues[] = {1,10,33,...};
更多的研究,我找到了我自己问题的答案。
'\' 后面的字符称为转义序列。
您可以通过使用从'\000' 到'\777' 的转义序列将八进制等效的ascii 放入字符串中。
十六进制也是如此,“x00”到“xFF”。
我使用“xC1”到“xC8”打印我的自定义字符,因为我只有 8 个自定义字符。
每件事都在一行代码中完成:lcd_putc("Degree \xC1")
角色的简单、使用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”