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

请问上C++的格式化输出

2013-02-25 
请教下C++的格式化输出unsigned int a 0xfffffff7unsigned char i (unsigned char)achar *b (char

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

 
    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

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

热点排行