c++里转换输入流控制

转载:https://blog.csdn.net/kdmcser/article/details/35374389

STL源码定义的hex:

inline ios_base& __CLRCALL_OR_CDECL hex(ios_base& _Iosbase)
	{	// set basefield to hex
	_Iosbase.setf(ios_base::hex, ios_base::basefield);
	return (_Iosbase);
	}

hex实际上是一个函数名(在C++里函数名等同于指向函数的指针),这个函数调用iobase类的setf()方法改变输入流状态的。
cout实际上是ostream类的一个对象

__PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cout, *_Ptr_cout;

ostream类由模板类basic_ostream实现

typedef basic_ostream<char, char_traits<char> > ostream;

basic_ostream类重载了很多种<<操作符,找到和hex相关的

	_Myt& __CLR_OR_THIS_CALL operator<<(ios_base& (__clrcall *_Pfn)(ios_base&))
		{	// call ios_base manipulator
		_DEBUG_POINTER(_Pfn);
		(*_Pfn)(*(ios_base *)this);
		return (*this);
		}

当我们输入cout<<hex时,编译器自动找到<<操作符的上述重载版本,直接调用hex(cout);
因此cout<<hex等效于hex(cout)

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    int a,b,c;
    cin>>hex>>a;//输入的是16进制的数
    cin>>oct>>b;//输入的是8进制的数
    cin>>dec>>c;//输入的是10进制的数
    cout<<a<<endl;//a,b,c分别转换成10进制
    cout<<b<<endl;
    cout<<c<<endl;

    cin>>a;
    cout<<hex<<a<<endl;//输出的是16进制的数
    cout<<oct<<a<<endl;//输出的是8进制的数
    cout<<dec<<a<<endl;//输出的是16进制的数

    return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值