C程序中的十六进制转八进制程序

1. 程序功能及流程介绍

本程序的主要功能是将十六进制数转换为八进制数。下面是程序的主要流程:

用户输入一个十六进制数;

程序将该数转换为二进制数;

程序将二进制数转换为八进制数;

程序输出转换后的八进制数。

2. 程序实现方法

2.1 计算二进制数

程序需要将输入的十六进制数转换为二进制数。为了做到这一点,需要将每个十六进制数位转换成等价的四位二进制数。下面是将单个十六进制数位转换为二进制数的方法:

假设十六进制数的一个数位为x(x为0~F的任意一个),则将其转换为二进制需要按照以下规律进行:

当x等于0时,其二进制数为0000;

当x等于1时,其二进制数为0001;

当x等于2时,其二进制数为0010;

当x等于3时,其二进制数为0011;

当x等于4时,其二进制数为0100;

当x等于5时,其二进制数为0101;

当x等于6时,其二进制数为0110;

当x等于7时,其二进制数为0111;

当x等于8时,其二进制数为1000;

当x等于9时,其二进制数为1001;

当x等于A时,其二进制数为1010;

当x等于B时,其二进制数为1011;

当x等于C时,其二进制数为1100;

当x等于D时,其二进制数为1101;

当x等于E时,其二进制数为1110;

当x等于F时,其二进制数为1111。

以十六进制数“0x3F7”为例,该数转换为二进制数的过程如下:

0x3F7 → 0011 1111 0111

其中,“0x”表示十六进制数的前缀,它不是要进行转换的部分。

2.2 计算八进制数

程序将二进制数转换为八进制数的方法比较简单,只需要将每三位二进制数转换为一个八进制数即可。注意如果二进制数的位数不是三的倍数,程序需要在左侧补零,使其位数变为三的倍数。

以转换后的二进制数“011 1111 0111”为例,该数转换为八进制数的过程如下:

011 1111 0111 → 7 7 7

3. 程序代码

程序代码如下:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main()

{

char hex_num[10];

char bin_num[40];

char oct_num[15];

int i, j, k;

int len;

printf("请输入一个十六进制数:");

scanf("%s", hex_num);

len = strlen(hex_num);

j = 0;

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

{

switch(hex_num[i])

{

case '0':

bin_num[j++] = '0';

bin_num[j++] = '0';

bin_num[j++] = '0';

bin_num[j++] = '0';

break;

case '1':

bin_num[j++] = '0';

bin_num[j++] = '0';

bin_num[j++] = '0';

bin_num[j++] = '1';

break;

case '2':

bin_num[j++] = '0';

bin_num[j++] = '0';

bin_num[j++] = '1';

bin_num[j++] = '0';

break;

case '3':

bin_num[j++] = '0';

bin_num[j++] = '0';

bin_num[j++] = '1';

bin_num[j++] = '1';

break;

case '4':

bin_num[j++] = '0';

bin_num[j++] = '1';

bin_num[j++] = '0';

bin_num[j++] = '0';

break;

case '5':

bin_num[j++] = '0';

bin_num[j++] = '1';

bin_num[j++] = '0';

bin_num[j++] = '1';

break;

case '6':

bin_num[j++] = '0';

bin_num[j++] = '1';

bin_num[j++] = '1';

bin_num[j++] = '0';

break;

case '7':

bin_num[j++] = '0';

bin_num[j++] = '1';

bin_num[j++] = '1';

bin_num[j++] = '1';

break;

case '8':

bin_num[j++] = '1';

bin_num[j++] = '0';

bin_num[j++] = '0';

bin_num[j++] = '0';

break;

case '9':

bin_num[j++] = '1';

bin_num[j++] = '0';

bin_num[j++] = '0';

bin_num[j++] = '1';

break;

case 'A':

case 'a':

bin_num[j++] = '1';

bin_num[j++] = '0';

bin_num[j++] = '1';

bin_num[j++] = '0';

break;

case 'B':

case 'b':

bin_num[j++] = '1';

bin_num[j++] = '0';

bin_num[j++] = '1';

bin_num[j++] = '1';

break;

case 'C':

case 'c':

bin_num[j++] = '1';

bin_num[j++] = '1';

bin_num[j++] = '0';

bin_num[j++] = '0';

break;

case 'D':

case 'd':

bin_num[j++] = '1';

bin_num[j++] = '1';

bin_num[j++] = '0';

bin_num[j++] = '1';

break;

case 'E':

case 'e':

bin_num[j++] = '1';

bin_num[j++] = '1';

bin_num[j++] = '1';

bin_num[j++] = '0';

break;

case 'F':

case 'f':

bin_num[j++] = '1';

bin_num[j++] = '1';

bin_num[j++] = '1';

bin_num[j++] = '1';

break;

default:

printf("输入不合法!\n");

return 1;

}

}

// 补零

while(j % 3 != 0)

{

bin_num[j++] = '0';

}

bin_num[j] = '\0';

len = strlen(bin_num);

k = 0;

for(i=0;i<len;i+=3)

{

oct_num[k++] = ((bin_num[i] - '0') << 2) | ((bin_num[i+1] - '0') << 1) | (bin_num[i+2] - '0');

oct_num[k-1] += '0';

}

oct_num[k] = '\0';

printf("转换后的八进制数为:%s\n", oct_num);

return 0;

}

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签