使用c语言写一个16进制转8进制的代码。
时间: 2024-10-29 17:23:58 浏览: 29
当然可以。在C语言中,我们可以使用ASCII码来间接转换16进制数到8进制数,因为每个字符对应的ASCII码都是连续的,而十六进制和八进制之间有对应关系。以下是一个简单的示例,它将用户输入的16进制字符串转换为8进制字符串:
```c
#include <stdio.h>
#include <string.h>
void hex_to_oct(char hex[], char oct[]) {
int i, len = strlen(hex), base = 1;
for (i = len - 1; i >= 0; i--) {
switch (hex[i]) {
case '0':
oct[len] = '0' + base * 0;
break;
case '1':
oct[len] = '0' + base * 1;
break;
case '2':
oct[len] = '0' + base * 2;
break;
case '3':
oct[len] = '0' + base * 3;
break;
case '4':
oct[len] = '0' + base * 4;
break;
case '5':
oct[len] = '0' + base * 5;
break;
case '6':
oct[len] = '0' + base * 6;
break;
case '7':
oct[len] = '0' + base * 7;
break;
case '8':
oct[len] = '0' + base * 8;
break;
case '9':
oct[len] = '0' + base * 9;
break;
case 'A':
case 'a':
oct[len] = '0' + base * 10;
break;
case 'B':
case 'b':
oct[len] = '0' + base * 11;
break;
case 'C':
case 'c':
oct[len] = '0' + base * 12;
break;
case 'D':
case 'd':
oct[len] = '0' + base * 13;
break;
case 'E':
case 'e':
oct[len] = '0' + base * 14;
break;
case 'F':
case 'f':
oct[len] = '0' + base * 15;
break;
default:
printf("Invalid hexadecimal character at position %d\n", i);
return;
}
len--;
base *= 16;
}
oct[len] = '\0';
}
int main() {
char hex[32], oct[64];
printf("Enter a hexadecimal number: ");
fgets(hex, sizeof(hex), stdin);
hex[strlen(hex) - 1] = '\0'; // Remove newline
hex_to_oct(hex, oct);
printf("The equivalent octal value is: %s\n", oct);
return 0;
}
```
这个程序首先提示用户输入一个16进制数字,然后去除行尾的换行符,并将其传递给`hex_to_oct`函数进行转换。最后,它打印出结果。
阅读全文