您的位置 首页 知识

十六进制转换成八进制蓝桥杯C语言(16进制和8进制转换)

c语言十六进制转换八进制怎么转? 此题涉及到大数据处理(输入的16进制数最大可能到100000位),所以不能用…

c语言十六进制转换八进制怎么转?

此题涉及到大数据处理(输入的16进制数最大可能到100000位),所以不能用常规的除8模8方法做,思路:

先将十六进制转为二进制表示

再将二进制转换为八进制表示,然后输出

具体程序实现如下:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

/* 将十六进制字符转换为数值 */

int get_value(const char c)

{

if (c >= ‘0’ && c <= ‘9’)

return c – ‘0’;

else

return c – ‘A’ + 10;

}

int main()

{

char *input, *output, *output2, *ptr;

int n, i, j, tmp, len;

scanf(“%dn”, &n);

input = (char *)malloc(100000+1);/* 储存输入的十六进制数 */

output = (char *)malloc(100000*4+4);/* 储存过度用的二进制数 */

output2 = (char *)malloc(100000*3+3);/* 储存最终结果八进制数 */

while(n–)

{

gets(input);

len = strlen(input);

ptr = input;

j=0;

/* 首先将十六进制转换为二进制,1位十六进制数对应4位二进制数 */

while(*ptr)

{

tmp = get_value(*ptr);

output[j++] = ((tmp>>3)&0x1);/* bit3 */

output[j++] = ((tmp>>2)&0x1);/* bit2 */

output[j++] = ((tmp>>1)&0x1);/* bit1 */

output[j++] = ((tmp>>0)&0x1);/* bit0 */

ptr ++;

}

/* 将二进制转换为八进制,3位二进制数对应1位八进制数,从低位开始转 */

/* j为二进制数组下标,每个循环减3 */

/* i为八进制数组下标,每个循环减1 */

j=len*4-1;

i=(len*4+2)/3 – 1;

output2[i+1] = ‘’;

for(;j>=0;)

{

if(j >= 2)

output2[i–] = (output[j-2]<<2 | output[j-1]<<1 | output[j]) + ‘0’;

else if (j == 1)

output2[i–] = (output[j-1]<<1 | output[j])+’0′;

else if (j == 0)

output2[i–] = output[j]+’0′;

j -= 3;

}

/* 八进制数组的有效下标从 i+1 开始 */

j = i+1;

/* 去除前导的’0’字符(可能会影响判定结果) */

while(output2[j]==’0′) j++;

/* 如果整个字符串都是’0’,则直接输出结果’0’,否则从首位非’0’开始输出 */

if( output2[j] == ‘’)

printf(“0n”);

else

printf(“%sn”, &output2[j]);

}

free(input);

free(output);

free(output2);

return 0;

}

8进制和16进制怎么转换?

8进制转换为16进制,首先需要转换为2进制,再转换到16进制

18进制转换为2进制对应数字如下

2以1633.66这个8进制数字为例

每个数字一一对应上方的表格写出来,去掉首尾的0,变成1110011011.11011

3二进制和16进制转换表如下

4把整数从右到左四位一组,小数从左到右四位一组

所以1633.66这个八进制的16进制为39B.D8

345从八进制转换成十六进制是多少?

  • ……………….E5

将十六进制B8DF转换成八进制

  • 首先,我们知道,十六进制的数值包括0~9,A,B,C,D,E,F。其中A=10,B=11,C=12,D=13,E=14,F=15.我们还知道,2^4=16 ,2^3=8.因此在进行二进制、八进制、十六进制之间转换时,首先转为二进制比较方便。首先,我们将十六进制数拆为B,8,D,F几个数,十六进制B在十进制中为11,转为四位二进制就是1011,十六进制8在十进制中仍然表示为8,8转为四位二进制为1000,十六进制D转为十进制为13,十进制13转为四位二进制为1101,十六进制F转为十进制为15 ,十进制15转为四位二进制为1111,由此,我们可以得出十六进制B8DF转为二进制是:1011100011011111,此时,我们从右往左,每三位取一组算成十进制数:1 011 100 011 011 111,最前面只剩一个1,在左边加0,变为001,即001 011 100 011 011 111,二进制数:111转为十进制为7,二进制数:011转为十进制为3,二进制数:011转为十进制为3,二进制数:100转为十进制为4,二进制数:011转为十进制为3,二进制数001转为十进制数为1,综上可得,十六进制数B8Df转为八进制为,134337.

将十六进制数1963.96857分辨率转换成二进制数,八进制数,十六进制数?

  • 求求了啊 速度
  • 二进制1100101100011八进制14543十进制6499

把十进制248转换成二进制,八进制和十六进制

  • 进制转化口诀将十进制转化为R进制: 除基取余,倒序排列将R进制转化为十进制: 乘权累加。
版权声明
返回顶部