C++进制转换方法

指定输出格式

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

int main()  
{  
    int str;
    cin>>std::dec>>str; //以10进制输入string(保存为int)
    cout << "8进制:" << std::oct << str<< endl;  
    cout << "10进制" << std::dec << str << endl;  
    cout << "16进制:" << std::hex << str << endl;  
    cout << "2进制: " << bitset<8>(str) << endl;      //<8>:表示保留8位输出
    return 0;  
}  

C语言库函数

C语言提供一系列函数,将字符串转换为整数,包括:

  • int atoi(const char *nptr):将字符串nptr转换为int
  • long atol(const char *nptr):将字符串nptr转换为long int
  • long long atoll(const char *nptr):将字符串nptr转换为long long int
#include <stdlib.h>

int main()
{
  int i=0;
  
  i=atoi("123");
  printf("i=%d\n",i);  // 输出i=123

  i=atoi("123abc");
  printf("i=%d\n",i);  // 输出i=123,合法数字后的abc被忽略

  i=atoi("abc123");
  printf("i=%d\n",i);  // 输出i=0,数字前有字符为非法

  i=atoi("+123");
  printf("i=%d\n",i);  // 输出i=123,+是合法字符

  i=atoi("-123");
  printf("i=%d\n",i);  // 输出i=-123,-是合法字符
  
  return 0;
}

C++库函数

stoi(const string s,int begin,int n):将n进制的字符串s从begin位置开始转化为10进制数。

  • 参数是const string类型
  • 会做范围检查,默认在int范围内,超出会runtime error
#include<string.h> //头文件

stoi(str, , ); //字符串str从0位置开始到末尾的2进制转换为10进制(int型)
stol(str,0,radix); //字符串str从0位置到末尾的radix进制数转换为10进制(long型)

字符串流 stringstream

#include<iostream>
#include<string>
#include<sstream> //头文件
using namespace std;

int main()
{
	//8or16进制转10进制
	string s="20";
	int a;
	stringstream ss;
	ss<<hex<<s;    //以16进制将s读入流中
	ss>>a;        //以10进制int型输出
	cout<<a<<endl;	//输出:32
	
	//10进制转8or16进制
	string s1,s2;
	int a=30;
	stringstream ss;
	ss<<oct<<a; //以8进制读入流中
	ss>>s1; //再以字符串输出			
	cout<<s1<<endl; //输出:36
	
	ss.clear();		//不清空可能会出错
	ss<<hex<<a;		 //以16进制读入流中
	ss>>s2;			
	cout<<s2<<endl;    //输出:1e
		
	return 0;
}

函数实现

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

/* Atoi():任意进制转换为10进制(字符串类型转整数型) */
int Atoi(string s,int radix)    //s是给定的radix进制字符串
{
	int ans=0;
	for(int i=0;i<s.size();i++)
	{
		char t=s[i];
		if(t>='0' && t<='9') ans = ans*radix + t - '0';
		else ans = ans*radix + t - 'a' + 10;
	}
	return ans;
}

/* intToA():将10进制整型数转换为radix进制string */
string intToA(int n,int radix) //n是待转10进制数,radix是指定的进制
{
	string ans="";
	do{
		int t = n % radix;
		if(t>=0 && t<=9)	ans += t + '0';
		else ans += t - 10 + 'a';
		n/=radix;
	}while(n!=0);	//使用do{}while()以防止输入为0的情况
	reverse(ans.begin(),ans.end());
	return ans;	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值