你知道吗?在系统编程中,一个℃符号背后可能藏着字符编码的玄机,甚至能牵出终端交互的底层逻辑。
说到℃符号,很多人会下意识打开字符映射表。但作为系统级黑客,我们更该追问:这个符号在内存中到底长什么样?
Windows的Ctrl+Shift+°确实方便,但C语言程序员不该止步于此。在嵌入式系统或Linux环境下,你得面对更残酷的现实——标准ASCII只收录了32个控制字符和95个可打印字符,℃符号根本不在其中。
这时候就要祭出C语言的真本事了。先看这段代码:
#include <stdio.h>
int main() {
printf("\xB0C\n");
return 0;
}
别急着编译,先想想\xB0是什么?那是ISO 8859-1编码下的度数符号,但放到UTF-8环境里就完犊子了。
真正的硬核玩家会用宽字符。比如在Windows上:
#include <stdio.h>
int main() {
wchar_t temp[] = L"25\xB0C";
wprintf(temp);
return 0;
}
或者Linux下用UTF-8:
#include <stdio.h>
int main() {
printf("\u2103\n"); // Unicode的摄氏度符号
return 0;
}
注意:后者需要编译器支持UTF-8源码,否则会触发Undefined Behavior。
更狠的是直接操作终端。比如在POSIX系统中:
#include <unistd.h>
#include <sys/ioctl.h>
int main() {
ioctl(STDOUT_FILENO, TIOCSETA, &termios); // 设置终端属性
write(STDOUT_FILENO, "\x1B[38;2;0;255;255m25°C\x1B[0m", 14); // 带颜色的输出
return 0;
}
别小看这个符号,它可能是你调试内核模块时遇到的首个字符编码陷阱。
试试看:在你的系统上能否用C语言直接写入UTF-8的℃符号?答案可能出乎意料。
C语言,字符编码,宽字符,终端操作,Unicode,UTF-8,printf,系统编程,内存布局,控制字符