cc++进制转换方法汇总(含全部代码)

更新时间:2023-12-14 11:38:02 阅读: 评论:0

2023年12月14日发(作者:我感恩)

-

cc++进制转换方法汇总(含全部代码)

cc++进制转换方法汇总(含全部代码)

进制转换方法汇总表

原进制

十进制

十进制

十进制

十进制

二进制

二进制

二进制

八进制

八进制

八进制

十六进制

十六进制

十六进制

转换进制

二进制

八进制

十六进制

其他进制

八进制

十进制

十六进制

二进制

十进制

十六进制

二进制

八进制

十进制

方法1

bitt指定格式输出

oct/%o指定格式输出

hex/%x指定格式输出

三位一组

按权展开

四位一组

一位换三

按权展开

一位换四

按权展开

方法2

方法3

除留余数法

除留余数法

除留余数法

除留余数法

除留余数法

除留余数法

方法4

itoa

itoa

itoa

itoa

strtol

strtol

strtol

基本操作函数:

Atoi(string &S, int R) 任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制

Itoa(int Num,int R) 十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回

所要转换的进制数

功能实现函数:

ToAll() 十进制转任意进制 调用函数Itoa,自带的itoa

ToDecimal(string &S) 任意进制转十进制函数 调用Atoi函数,strtol函数

ZhiDing() 作用:利用std的hex dec 以及 bitt,c语言的%o,%x

Stream() 作用:利用sstream头文件将数按某进制读入流,输出流

1.任意进制转十进制

【分析】按权展开,求和即可。例如,二进制数110,即4+2+0=6;另外,不想自己写的话,有函数(百度百科)。

long int strtol(const char *nptr,char **endptr,int ba);参数:字符串,非法字符指针,字符串中的进制

考虑的很详细,字符串中含有非法的字符(,.*等)时还能停止转换,并返回指针。

2.十进制转任意进制

【分析】除留余数法,逆序输出余数即可。另外,如果自己不想写的话,有函数。

string itoa(int x,char *string,int jz);参数:想要转换的数,转换结果字符串,转换结果的进制

3.指定格式与流

【分析】主要是八进制、十进制和十六进制。对c来说是%o%d,%x;对c++来说是oct,dec,hex。作者感觉所谓的指定格式是输入输出

流,sstream的stringstream类是字符串流,本质上应该是差不多的,就写在了一起。学的不深,没有看标准库中类的源代码,请大神指

点。

4.二、八、十六之间的转换

【分析】表格里面的一位换四,三位一组之类的是指通过二进制。例如,二进制与八进制进行转换,二进制的110就是八进制的6。反过

来,八进制转为二进制,只需要一位转换为三位,6换为110即可。由于也不多,大家都很熟悉,没必要用除留余数法,可以自己写个映射

之类的。至于八进制与十六进制的转换,可以利用二进制或十进制作为跳板。(这个代码里面没有,读者可以尝试写一下)

5.全部代码

/*

Project: 进制转换(Radix)

Date: 2019/02/24

Author: Frank Yu

基本操作函数:

Atoi(string &S, int R) 任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制

Itoa(int Num,int R) 十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回所要转换的进制数

功能实现函数:

ToAll() 十进制转任意进制 调用函数Itoa

ToDecimal(string &S) 任意进制转十进制函数 调用Atoi函数,strtol函数

ZhiDing() 作用:利用std的hex dec 以及 bitt,c语言的%o,%x

Stream() 作用:利用sstream头文件将数按某进制读入流,输出流

*/

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define Max 100

//进制权值

int power(int R,int turn)

{

int ans = 1;

while (turn--)

{

ans = ans*R;

}

return ans;

}

//**************************************基本操作函数**********************************//

//任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制

long int Atoi(string &S, int R)

{

long int ans = 0;

for (int i=0;i < ();i++)//按权展开

{

ans += (S[i] - '0') * power(R, () - i - 1);

}

/* 网上代码 不理解(已了解,举例,十六进制时t可能为f,那么f-'a'=5,再加10就是15了)

int ans=0;

for (int i = 0;i<();i++)

{

char t = s[i];

if (t >= '0'&&t <= '9') ans = ans*radix + t - '0';

el ans = ans*radix + t - 'a' + 10;

}*/

return ans;

}

}

//十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回所要转换的进制数

string Itoa(int Num,int R)

{

string remain="";

int temp;

do {

temp = Num%R;//取余

Num /= R;

if (temp >= 10)

remain += temp - 10 + 'A';//任意进制为大于基数大于10的进制 例如,十六进制

el remain += temp + '0';

} while (Num);

rever((),());//逆序

return remain;

}

//**************************************功能实现函数**********************************//

//菜单

void menu()

{

cout << "************1.十进制转任意进制(除留余数) 2.任意进制转为十进制(按权展开)****" << endl;

cout << "************3.十进制指定格式输出(二、八、十六) 4.利用流****************************" << endl;

cout << "************5.退出" << endl;

}

void menu1()

{

cout << "************1.十进制转二进制 2.十进制转八进制****" << endl;

cout << "************3.十进制转十六进制 4.退出**************" << endl;

}

void menu2()

{

cout << "************1.十进制转八进制 2.十进制转十六进制**************" << endl;

cout << "************3.八进制转十进制 4.十六进制转十进制**************" << endl;

cout << "************5.退出" << endl;

}

//十进制转任意进制 调用函数Itoa,自带的itoa

void ToAll()

{

int num, R;char str[Max];

cout << "请输入数和进制:" << endl;

cin >> num >> R;

cout << num << "转换为"<

cout << "利用itoa函数:" <

}

//任意进制转十进制函数 调用Atoi函数,strtol函数

void ToDecimal(string &S)

{

int R;

cout << "请输入数和进制:" << endl;

cin >>S>>R;

cout <

//利用strtol函数 long int strtol(const char *nptr,char **endptr,int ba)

//参数,字符串,非法字符指针,字符串中的进制

char nptr[Max],*stop;

strcpy(nptr,S.c_str());//string类型转换为char

cout<

}

//作用:利用std的hex dec 以及 bitt,c语言的%o,%x

void ZhiDing()

{

int num;int choice = 0;

cout << "请输入十进制数:" << endl;

cin >> num;

while (1)

{

menu1();

printf("请输入菜单序号:n");

scanf("%d", &choice);

if (4 == choice) break;

switch (choice)

{

ca 1:cout << num <<"转为二进制(利用bitt):"<(num)<

ca 2: {

cout << num << "转为八进制(利用oct):" << oct << num << endl;

printf("转为八进制(利用o):%on",num);//8位,高位补0

}break;

ca 3: {

cout << num << "转为十六进制:" << hex << num << endl;

printf("转为十六进制(利用x):%xn", num);

}break;

default:printf("输入错误n");break;

}

}

}

//作用:利用sstream头文件将数按某进制读入流,输出流

void Stream()

{

string s;int choice = 0;

stringstream ss;int num;

while (1)

{

menu2();

printf("请输入菜单序号:n");

scanf("%d", &choice);

if (5 == choice) break;

switch (choice)

{

ca 1: {

cout << "请输入一个数:" << endl;

cin >> num;

();//清空一下,防止出错

ss << oct << num;//十进制转为八进制读入流中

ss >> s;//转换的八进制数放入字符串s中

cout << num << "转为八进制(利用流):" << s << endl;

}break;

ca 2: {

cout << "请输入一个数:" << endl;

cin >> num;

();//清空一下,防止出错

ss << hex << num;//十进制转为十六进制读入流中

ss >> s;//转换的十六进制数放入字符串s中

cout << num << "转为十六进制(利用流):" << s << endl;

}break;

ca 3: {

cout << "请输入一个数:" << endl;

cin >> s;

();//清空一下,防止出错

ss << oct << s;//将s以八进制形式读入流中

ss >> num;//以十进制输入到num中

cout << s << "转为十进制(利用流):" << num << endl;

}break;

ca 4: {

cout << "请输入一个数:" << endl;

cin >> s;

();//清空一下,防止出错

ss << hex << s;//将s以八进制形式读入流中

ss >> num;//以十进制输入到num中

cout << s << "转为十进制(利用流):" << num << endl;

}break;

default:printf("输入错误n");break;

}

}

}

//主函数

int main()

{

int choice = 0;

string S;

while (1)

{

menu();

printf("请输入菜单序号:n");

scanf("%d", &choice);

if (5 == choice) break;

switch (choice)

{

ca 1:ToAll();break;

ca 2:ToDecimal(S);break;

ca 3:ZhiDing();break;

ca 4:Stream();break;

default:printf("输入错误n");break;

}

}

return 0;

}

更多数据结构与算法实现:

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

-

cc++进制转换方法汇总(含全部代码)

本文发布于:2023-12-14 11:38:01,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/zhishi/a/1702525081121347.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:cc++进制转换方法汇总(含全部代码).doc

本文 PDF 下载地址:cc++进制转换方法汇总(含全部代码).pdf

标签:进制   函数   利用   字符串   转换   任意   八进制
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 实用文体写作网旗下知识大全大全栏目是一个全百科类宝库! 优秀范文|法律文书|专利查询|