gpt4 book ai didi

将二进制数转换为十六进制的 C 程序无法转换两个以上的二进制数(如果它们等于十六进制字母)

转载 作者:行者123 更新时间:2023-11-30 18:55:44 25 4
gpt4 key购买 nike

例如,如果我输入 101010101010,它应该等于 AAA,但它不起作用。仅当一次少于两个字母时才返回字母。例如,如果我输入“10101010”,它就会起作用。 (返回 AA)。请帮忙?

#include <stdio.h>
#include <math.h>
#include <string.h>
void binary_hex(int n, char hex[]);
int hex_binary(char hex[]);

int main()
{
printf("Enter binary number: ");
scanf("%d",&n);
binary_hex(n,hex);
printf("Hexadecimal number: %s",hex);
}

void binary_hex(int n, char hex[]) /* Function to convert binary to hexadecimal. */
{
int i=0,decimal=0, rem;
while (n!=0)
{
decimal += (n%10)*pow(2,i);
n/=10;
++i;
}

/* At this point, variable decimal contains binary number in decimal format. */
i=0;
while (decimal!=0)
{
rem=decimal%16;
switch(rem)
{
case 10:
hex[i]='A';
break;
case 11:
hex[i]='B';
break;
case 12:
hex[i]='C';
break;
case 13:
hex[i]='D';
break;
case 14:
hex[i]='E';
break;
case 15:
hex[i]='F';
break;
default:
hex[i]=rem+'0';
break;
}
++i;
decimal/=16;
}
hex[i]='\0';
strrev(hex); /* Function to reverse string. */
}

最佳答案

您尚未显示完整的程序 - n 未在 main 的任何作用域中声明。假设 int n,你的第一个问题就在这里:

printf("Enter binary number: ");
scanf("%d",&n);

您正在以 10 为基数(十进制)整数读取由 1 和 0 组成的字符串。相反,您应该编写一个函数,该函数采用 const char * 并迭代每个字符,验证它是 1 还是 0,解释每个值并累加总数。提示:按从右到左的顺序工作可能会更容易。

int parse_binary(const char *str)
{
int total = 0;

while (...) {
total += ...
}

return total;
}

另一个提示:不要重新发明轮子。当然,有人想在你之前用 C 解析二进制数,不是吗?查看 strtoul - 即其第三个参数的描述。

注意:到目前为止我提到的两件事都将二进制值限制为 32 位(或 64 位,具体取决于您的数据类型选择)。如果您不需要实际使用整数值,any 只需将 1 和 0 的字符串转换为十六进制值的字符串(任意长度),那么您可以将问题分解为更简单的步骤。

我们真正喜欢使用十六进制的原因是,十六进制值中的每个字符恰好代表一个半字节,即四位。这意味着每组四个 1 或 0 恰好对应一个十六进制字符。假设您的输入长度始终是 4 个字符的倍数,您可以轻松处理任意长的字符串。

D    E    A    D    B    E    E    F
1101 1110 1010 1101 1011 1110 1110 1111

关于将二进制数转换为十六进制的 C 程序无法转换两个以上的二进制数(如果它们等于十六进制字母),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26705709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com