C++程序输出异常咨询:char转unsigned int取值不符问题
问题解释
核心问题:未定义行为导致的非法内存访问
你写的代码存在未定义行为:
char类型变量通常仅占用1字节内存,而unsigned int在32位系统下一般占4字节。- 当你把
char的地址强制转换为unsigned int*并解引用时,程序会读取从&char_开始的4个连续字节,但只有第一个字节是char_的有效值(ASCII'3'对应的0x33,即十进制51),剩下3个字节是栈上的随机垃圾数据,这部分内容完全不可预测。
为什么你没识别出51的字节
你看到的十进制数1644042035,转成十六进制是0x6FE10733(现代系统基本都是小端字节序):
- 小端字节序中,多字节变量的低字节存放在内存低地址,所以
char_的字节0x33(十进制51)是这个unsigned int的最低有效字节,对应十六进制末尾的33。 - 因为前面的垃圾字节数值很大,十进制整体看起来和51毫无关联,只有转成十六进制才能看到你预期的
0x33。
正确的做法
如果只是想获取char的ASCII值,直接用类型转换即可,完全不需要操作指针:
char char_ = '3'; unsigned int ascii_val = static_cast<unsigned int>(char_); cout << char_ << endl; cout << ascii_val << endl; // 输出51
内容的提问来源于stack exchange,提问作者Revanth
相关产品推荐
相关产品推荐

