请教下C++的格式化输出

chenzhp 2013-02-06 03:38:36
 
unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char *b = (char *)&a;
//用传统的printf就输出正常
printf("%08x,%08x\n",i,*b);//输出结果:000000f7,fffffff7


我想用C++的格式化输出为什么总是不对?一堆乱码?应该怎么改写啊


unsigned int a = 0xfffffff7;
unsigned char i = (unsigned char)a;
char *b = (char *)&a;
//如下是哪里不对?
cout<<setw(8)<<hex<<i<<endl
cout<<setw(8)<<hex<<*b<<endl
...全文
386 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ForestDB 2013-02-06
  • 打赏
  • 举报
回复
C和C++都有隐式转换 C++比C类型更强

# include <stdio.h>

int main()
{
    unsigned int a = 0xFFFFFFF7;
    unsigned char i = (unsigned char)a; // i为0xF7
    char * b = (char *)&a; // 小端系统,b指向0xF7
    printf("%08x,%08x\n", i, *b); // x需要int长度,这里i和*b都发生了类型提升(隐式转换)

    return 0;
}

# include <iostream>
# include <iomanip>

using namespace std;

int main()
{
    unsigned int a = 0xfffffff7;
    unsigned char i = (unsigned char)a;
    char * b = (char *)&a;
// 以上分析和上面的一样

    cout << setw(8) << hex << i << endl;
    cout << setw(8) << hex << *b << endl;
// cout针对操作数的类型做了各种重载,所以以上的i和*b都是按char来输出0xF7的,因为它们是char类型

    return 0;
}

# include <iostream>
# include <iomanip>

using namespace std;

int main()
{
    unsigned int a = 0xfffffff7;
    unsigned char i = (unsigned char)a;
    char * b = (char *)&a;

    cout << setw(8) << hex << (unsigned int)i << endl;
    cout << setw(8) << hex << (int)*b << endl;
    cout << setw(8) << setfill('0') << hex << (unsigned int)i << endl;

    return 0;
}

      f7
fffffff7
000000f7
chenzhp 2013-02-06
  • 打赏
  • 举报
回复
而且有一个问题:
 unsigned int a = 0xfffffff7;
    unsigned char i = (unsigned char)a;
    char *b = (char *)&a;
    这个时候是一个char型的指针b指向a,char型的寻址是每次跳一个字节,而int型指针是跳4字节,那么这个时候*b的内容就应该是a的前一个字节,f7,为什么输出是fffffff7?

    printf("%08x,%08x\n",i,*b);//输出结果:000000f7,fffffff7

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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