// 八进制数转换成十六进制数
#include<stdio.h>
#include<math.h>
int main()
{
int i = 0, j = 0, k, m, n = 20, num = 0;
double sum = 0;
char ch, binaryNum[21]; // 对于支持C99的编译器,元素个数用n
char binary_Num[21]; // 存放反序的二进制数
char Num8[21]; // 存放八进制数
char Num16[21]; // 存放十六进制数
printf("请输入八进制数:");
while ((ch = getchar()) != '\n') // 输入二进制数
{
Num8[i] = ch;
i++;
}
n = i;
// 八进制转二进制
for (i = 0;i < n;i++)
{
ch = Num8[i];
k = ch - '0';
switch (k)
{
case 0:
{
binaryNum[j] = '0';
binaryNum[j + 1] = '0';
binaryNum[j + 2] = '0';
break;
}
case 1:
{
binaryNum[j] = '0';
binaryNum[j + 1] = '0';
binaryNum[j + 2] = '1';
break;
}
case 2:
{
binaryNum[j] = '0';
binaryNum[j + 1] = '1';
binaryNum[j + 2] = '0';
break;
}
case 3:
{
binaryNum[j] = '0';
binaryNum[j + 1] = '1';
binaryNum[j + 2] = '1';
break;
}
case 4:
{
binaryNum[j] = '1';
binaryNum[j + 1] = '0';
binaryNum[j + 2] = '0';
break;
}
case 5:
{
binaryNum[j] = '1';
binaryNum[j + 1] = '0';
binaryNum[j + 2] = '1';
break;
}
case 6:
{
binaryNum[j] = '1';
binaryNum[j + 1] = '1';
binaryNum[j + 2] = '0';
break;
}
case 7:
{
binaryNum[j] = '1';
binaryNum[j + 1] = '1';
binaryNum[j + 2] = '1';
}
}
j += 3;
}
n = j;
printf("转换的二进制数为:");
for (i = 0;i < n;i++)
{
if (i % 4 != 0)
{
printf("%c", binaryNum[i]);
}
else
{
printf(" ");
printf("%c", binaryNum[i]);
}
}
printf("\n");
// 二进制数组反序
i = 0;
while ((n - i) > 0)
{
binary_Num[i] = binaryNum[n - i - 1];
i++;
}
binary_Num[n] = '\0';
// 二进制转十六进制
k = 0;
for (i = 0;i < n;i += 4)
{
for (j = 0;j < 4;j++)
{
m = binary_Num[i + j] - '0'; // 将字符转换为数字
if (j == 0 && (m == 0 || m == 1)) // 多加的m条件是防止结束符参与计算
num = m * 1;
if (j == 1 && (m == 0 || m == 1))
num += m * 2;
if (j == 2 && (m == 0 || m == 1))
num += m * 4;
if (j == 3 && (m == 0 || m == 1))
num += m * 8;
}
if (num >= 10 && num <= 16) // 将数字转换为字符
ch = (num - 10) + 'A';
else
ch = num + '0';
Num16[k] = ch;
num = 0;
k++;
}
Num16[k] = '\n';
i = 0; // 将反序的16进制数再反序回来
while ((k - i) > k / 2)
{
ch = Num16[i];
Num16[i] = Num16[k - i - 1];
Num16[k - i - 1] = ch;
i++;
}
printf("转换为16进制数为:");
for (i = 0;i < k;i++)
printf("%c", Num16[i]);
printf("\n");
}
|