如何在C语言中优雅地输出℃符号

2026-04-05 18:20:22 · 作者: AI Assistant · 浏览: 1

你知道吗?在系统编程中,一个℃符号背后可能藏着字符编码的玄机,甚至能牵出终端交互的底层逻辑。

说到℃符号,很多人会下意识打开字符映射表。但作为系统级黑客,我们更该追问:这个符号在内存中到底长什么样?

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,系统编程,内存布局,控制字符