C语言如何把十六进制转换成八进制
发布时间:2025-05-16 03:04:46 发布人:远客网络
一、C语言如何把十六进制转换成八进制
此题涉及到大数据处理(输入的16进制数最大可能到100000位),所以不能用常规的除8模8方法做,思路:
再将二进制转换为八进制表示,然后输出
if(c>='0'&&c<='9')
char*input,*output,*output2,*ptr;
input=(char*)malloc(100000+1);/*储存输入的十六进制数*/
output=(char*)malloc(100000*4+4);/*储存过度用的二进制数*/
output2=(char*)malloc(100000*3+3);/*储存最终结果八进制数*/
/*首先将十六进制转换为二进制,1位十六进制数对应4位二进制数*/
output[j++]=((tmp>>3)&0x1);/*bit3*/
output[j++]=((tmp>>2)&0x1);/*bit2*/
output[j++]=((tmp>>1)&0x1);/*bit1*/
output[j++]=((tmp>>0)&0x1);/*bit0*/
/*将二进制转换为八进制,3位二进制数对应1位八进制数,从低位开始转*/
/*j为二进制数组下标,每个循环减3*/
/*i为八进制数组下标,每个循环减1*/
output2[i--]=(output[j-2]<<2|output[j-1]<<1|output[j])+'0';
output2[i--]=(output[j-1]<<1|output[j])+'0';
output2[i--]=output[j]+'0';
/*八进制数组的有效下标从i+1开始*/
/*去除前导的'0'字符(可能会影响判定结果)*/
while(output2[j]=='0')j++;
/*如果整个字符串都是'0',则直接输出结果'0',否则从首位非'0'开始输出*/
printf("%s\n",&output2[j]);
二、问一道C语言题~~~!
1、设int类型变量只占内存两个字节,int a=-1;
2、printf("%d,%o,%x,%u\n",a,a,a,a);
3、分别是按10进制带符号,8进制无符号,16进制无符号,10进进制无符号的方式输出a
4、%d----10进制带符号,没问题就是原样输出-1
5、%o----8进制无符号,3位2进制位对应一位8进制,最高位也不是符号位
6、转化下: 1 111 111 111 111 111(16位1)
7、%x----16进制无符号,4位2进制对应1位16进制
8、%u----10进制无符号数,最高位的1不是符号了
三、C语言中,%o八进制输出,怎么算的,能说具体吗
1、首先打开Microsoft Visual C++软件,新建好文件后,输入如下内容。
2、然后在{}之间输入函数的内容,先定义变量c1,变量的类型为char,字符型。
3、然后,用printf语句进行输出。
4、当内容输入好后,点击图中工具按钮,对程序进行检测。
5、检测到没有错误后,点击运行(红色感叹号),弹出的黑色窗口中为最终结果,可以看到大写字母“A”显示在上面。