首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++一个简单的强制转换代码,输出为啥不对?解决方案

2012-03-24 
C++一个简单的强制转换代码,输出为啥不对?C/C++ code#include iostream.h#include string.hint main()

C++一个简单的强制转换代码,输出为啥不对?

C/C++ code
#include <iostream.h>#include <string.h>int main(){    int a = 0x12345678;    char *p = (char*)(&a);           cout<<hex<<*p<<endl;    return 0;}

结果如下:


[解决办法]
你这是转换成字符输出的,并不是以十六进制输出的,每个字符只占一个字节,所以你那样输出,会将他分成四个字节输出。。。
[解决办法]
从&a的地址开始你会看到存储的内容是
01111000 01010110 00110100 00010010 11111001 10001000 01000000 00000000
第一个字节为01111000B = 120, 120对应ASCII码 'x' 所以输出x
[解决办法]
char--->1字节
int---->4字节

强制转换成char后,高位的丢掉,0x12345678丢掉后就是0x78....转换成10进制就是120
[解决办法]
探讨
#include <iostream.h>
#include <string.h>
int main()
{
int a = 0x12345678;
char *p = (char*)(&amp;a);

cout<<hex<<*p<<endl;
return 0;
}

结果如下:

[解决办法]
int a = 0x12345678;即等于二进制的0001 0010 0011 0100 0101 0110 0111 1000
在内存地址中,是首地址一个字节存储的0111 1000(78),下一个0101 0110(56)
所以你cout<<hex<<*p<<endl;
这样输出的时候,实际上输出的是0111 1000对应的字符,即这个字符的ASCII码等于120,恰好就是x
[解决办法]
cout << hex << (int)(*p) << endl;

热点排行