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
[解决办法]
[解决办法]
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;