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

lovewwy 2012-02-16 07:57:18


#include <iostream.h>
#include <string.h>
int main()
{
int a = 0x12345678;
char *p = (char*)(&a);

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


结果如下:
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovewwy 2012-02-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 forestdb 的回复:]

引用楼主 lovewwy 的回复:
#include <iostream.h>
#include <string.h>
int main()
{
int a = 0x12345678;
char *p = (char*)(&amp;a);

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

结果如下:

输出x是正确的吧,*p为char类型,……
[/Quote]
哦,谢谢了,我是想输出78 ,结果x我还以为是错的
ForestDB 2012-02-16
  • 打赏
  • 举报
回复
cout << hex << (int)(*p) << endl;
面包大师 2012-02-16
  • 打赏
  • 举报
回复
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
ForestDB 2012-02-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 lovewwy 的回复:]
#include <iostream.h>
#include <string.h>
int main()
{
int a = 0x12345678;
char *p = (char*)(&a);

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

结果如下:
[/Quote]
输出x是正确的吧,*p为char类型,根据<<的重载,char类型输出对应的ascii即x(0x78),另外hex对char的输出无效吧。
试试:cout << hex << (int)(*p) << endl;
duke56 2012-02-16
  • 打赏
  • 举报
回复
char--->1字节
int---->4字节

强制转换成char后,高位的丢掉,0x12345678丢掉后就是0x78....转换成10进制就是120
lovewwy 2012-02-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 mzlogin 的回复:]

从&a的地址开始你会看到存储的内容是
01111000 01010110 00110100 00010010 11111001 10001000 01000000 00000000
第一个字节为01111000B = 120, 120对应ASCII码 'x' 所以输出x
[/Quote]
谢谢了,我本来是想让他输出16进制的,看来没输出
mzlogin 2012-02-16
  • 打赏
  • 举报
回复
从&a的地址开始你会看到存储的内容是
01111000 01010110 00110100 00010010 11111001 10001000 01000000 00000000
第一个字节为01111000B = 120, 120对应ASCII码 'x' 所以输出x
lovewwy 2012-02-16
  • 打赏
  • 举报
回复
结果显示一个x,我截图了,但不知如何上传,主楼又不让我编辑了。不是应该输出78吗?
面包大师 2012-02-16
  • 打赏
  • 举报
回复
你这是转换成字符输出的,并不是以十六进制输出的,每个字符只占一个字节,所以你那样输出,会将他分成四个字节输出。。。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧