在C++中,字符字面量赋值给整型变量可直接获得其ASCII码,因char本质是1字节整数类型,支持与int隐式转换;但推荐用static_cast显式转换以避免警告和符号扩展问题。

字符字面量直接赋值给整型变量就能拿到ASCII码
在C++里,char本质就是1字节的整数类型,它和int之间可以隐式转换。所以只要把字符存进int或unsigned int,就自动得到它的ASCII值。
-
'A'赋给int x = 'A';,x就是65 - 注意单引号——
'0'(字符零)是48,0(整数零)是0,别混 - 如果用
char c = 'a'; int n = c;,结果一样,但显式转成int更清晰 - 对非ASCII字符(比如中文、emoji),这种操作拿的是其底层编码值(如UTF-8多字节中的某个字节),不是“Unicode码点”,别误用
用static_cast显式转换更安全
隐式转换虽方便,但在开启严格警告(如-Wconversion)时可能报错,尤其涉及有符号/无符号差异时。显式转换能避免歧义,也提醒自己这是有意为之的类型提升。
-
int ascii = static_cast<int>('Z');</int>—— 明确、无警告 - 如果字符变量是
unsigned char,建议转成unsigned int,避免符号扩展问题:unsigned int u = static_cast<unsigned int>(uc);</unsigned> - 不要用
(int)'x'这种C风格强制转换,C++推荐static_cast
打印ASCII码时别忘了用std::cout而不是std::cout
新手常犯的错误是直接输出字符本身,结果看到的是字母,不是数字。必须确保参与运算或输出的是整型值。
- ❌
std::cout → 输出 <code>a - ✅
std::cout 或 <code>std::cout → 输出 <code>97 -
+一元加号会触发整型提升,是简短写法,但可读性不如static_cast - 如果用
printf,记得用%d而非%c:printf("%d", 'b');
宽字符wchar_t不能直接当ASCII用
wchar_t大小不固定(Windows是2字节,Linux通常是4字节),且通常用于Unicode,不是ASCII。拿L'A'转int得到的值依赖平台和编码,不是标准ASCII 65。
立即学习“C++免费学习笔记(深入)”;
- ASCII只定义0–127,只适用于
char及其扩展(如unsigned char) - 如果代码要跨平台处理文本,别假设
wchar_t值等于ASCII码 - 真需要处理Unicode码点,用
char32_t配合UTF-32,或用库(如ICU、std::text)解析UTF-8


















