C++ 将十六进制转换为八进制 帮忙看下我的代码

输入的十六进制最长有100000位
我先将十六进制转换为十进制 再将十进制转换为8进制

#include<iostream>
using namespace std;
const int maxn=100001;
int s[maxn],o=0,a=0,k=0,e[maxn*2],x=0;
int To_ten(int b,int c)
{
int p;
if(b>=48&&b<=57)
p=b-48;
else if(b>=65)
p=b-55;
for(int l=1;l<=c;l++)
p*=16;
return p;
}
int main()
{
char c;
while(cin.get(c)&&c!='\n')
s[o++]=c;
o--;
for(int j=o,i=0;j>=0;j--,i++)
k+=To_ten(s[j],i);
for( ; ; )
{
if(k==0)
break;
e[x++]=k%8;
k/=8;
}
for(int j=x-1;j>=0;j--)
cout << e[j];
return 0;
}

8进制的数组我定义的e[maxn*2] 有200000位 够吗?
如果要直接将16进制转换为8进制 那么应该怎么做呢?

第1个回答  2011-08-23
#include <stack>
#include <iostream>
using namespace std;
void f(int x,int y);
int main()
{

cout<<endl<<"欢迎使用进制转换程序!"<<endl;
cout<<" 1. 十进制 "<<endl<<endl;
cout<<" 2. 二进制 "<<endl<<endl;
cout<<" 3. 八进制 "<<endl<<endl;
cout<<" 4. 十六进制 "<<endl<<endl;
cout<<" 0. 退出 "<<endl<<endl;
cout<<"请选择输入数据的进制:";

int c,n;
cin>>c;
switch(c) {
case 1:
cout<<"请输入十进制数据:";
cin>>n;
cout<<endl<<"转换结果:";
f(10,n);
break;
case 2:
cout<<"请输入二进制数据:";
cin>>n;
cout<<endl<<"转换结果:";
f(2,n);
break;
case 3:
cout<<"请输入八进制数据:";
cin>>n;
cout<<endl<<"转换结果:";
f(8,n);
break;
case 4:
cout<<"请输入十六进制数据:";
cin>>n;
cout<<endl<<"转换结果:";
f(16,n);
break;
default:
exit(0);
}
return 0;
}
void f(int x,int y)
{
stack<int> s;
while (y) {
s.push(y%x);
y=y/x;
}
while(!s.empty()){
int i;
i=s.top();
s.pop();
cout<<i;
}
cout<<endl;
}
在VC++6中运行通过,完全满足你的需求
第2个回答  2011-08-22
16进制和8进制转换很简单,因为他们都与2进制有密切的关系。2^4=16,2^3=8,所以3个16进制可以转化为4个8进制数。所以空间肯定够了,还是过多了。
秩序吧3个16进制转为4个8进制储存即可。
最好的方法是,把6位16进制存在一个int数据中,或者干脆用unsigned char保存这样比较省空间。本回答被网友采纳
第3个回答  2011-08-22
理论上16进制转换成8进制可以这么做,16进制相当于把四位看成一个值,比如说如果说二进制数为1111 1111如果是16进制就会是FF 如果我们把三个位看成一个值,就相当于8进制了, 比如刚才的数就为011 111 111即为8进制的377.
第4个回答  2011-08-22
直接把16进制转为8进制更容易。
例如:a[4]={a,b,c,d};
char e[6];
e[0]=a[0]&7;
e[1]=(a[0]>>3+(a[1]<<1))&7;
e[2]=(a[1]>>2+(a[2]<<2))&7;
e[3]=(a[2]>>1)&7;
e[4]=(a[3])&7;
e[5]=a[3]>>3;
看出规律就知道怎么写了

C++ 将十六进制转换为八进制 帮忙看下我的代码
void f(int x,int y);int main(){ cout<<endl<<"欢迎使用进制转换程序!"<<endl;cout<<" 1. 十进制 "<<endl<<endl;cout<<" 2. 二进制 "<<endl<<endl;cout<<" 3. 八进制 "<<endl<<endl;cout<<" 4. 十六进制 "<<endl<<endl;cout<<" 0. 退出 "<<endl<<endl;cout<<"请...

C++中如何完成十六进制到八进制的转换?
cout << oct << x << endl; \/\/ 这个方法输出的数处理为8进制 } 顺便说一下:C 语言输入输出 %x 格式 是 16 进制, %o 是 8 进制。

求c++各进制转换的代码(double浮点数)
void hex();void main(){ printf("进制转换器\\n");int select;do { printf("===\\n");printf("0、退出\\t1、十进制~二进制\\t2、十进制~八进制\\t3、十进制~十六进制\\n");printf("请选择功能:");scanf("%d",&select);if(select==0){ break;} switch(select){ case 1: binarysys(...

c++函数编程实现自然数的十进制、二进制、八进制、十六进制转换
cout<<"**"<<n<<"转换为"<<base<<"进制的结果为:";for (j=i;j>=1;j--) \/\/ 将余数序列反序输出 if (num[j]<10) cout<<num[j]; \/\/ 如果是0-9数字则直接输出数字 else cout<<char(num[j]+'A'-10); \/\/ 如果是大于9的数字则转化为字符输出 cout<<endl;} int ...

怎么把十六进制转化为八进制
1、给定n个十六进制正整数,输出它们对应的八进制数。2、输入的第一行为一个正整数n (1<=n<=10)。3、接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。4、输出n行,每行为输入对应的八进制正整数。5、输入的十六进制数不...

C语言如何把十六进制转换成八进制
先将十六进制转为二进制表示 再将二进制转换为八进制表示,然后输出 具体程序实现如下:include <stdio.h>#include <stdlib.h>#include <string.h>\/* 将十六进制字符转换为数值 *\/ int get_value(const char c){ if (c >= '0' && c <= '9') return c - '0'; else retu...

...C++进制转换器:十进制→二、八、十六进制,二进制→八、十、十六进 ...
请输入数字 (0~9, A~Z): ABCD1357 当前进制 (2~36): 16 2,4,8,10,16进制,全部输出如下:2: 10101011110011010001001101010111 4: 2223303101031113 8: 25363211527 10: 2882343767 16: ABCD1357 Press any key to continue ===

十六进制怎么转为八进制?
1、首先将十六进制34转换为二进制:0011 0100(原则是一位十六进制转换成二进制是四位,如3转换成0011 ,4转换成0100)2

...然后分别转换成为二进制数,八进制数和16进制数输出。谢谢了我才...
include <iostream>using namespace std;int n,a[100];int main(){cout<<"请输入一个十进制数:"; cin>>n;int temp=n,num=0;while (temp>0){a[++num]=temp % 2;temp=temp\/2;}cout<<n<<"转化成二进制是:"<<endl;for (int i=num;i>=1;i--)cout<<a[num];cout<<endl; ...

如何将十六进制转为八进制?
首先,需要了解十六进制和八进制的规则。十六进制采用16个数码,分别是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其中A~F表示10~15这几个十进制数。八进制则采用8个数码,分别是0、1、2、3、4、5、6、7。接下来,以十六进制数'3A9B'为例进行转换。将该数从右往左每4位分成...

相似回答
大家正在搜