读书人

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

发布时间: 2013-02-25 10:23:36 作者: rapoo

请教下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

读书人网 >C++

热点推荐