2014-11-02 52 views
-1

例如,如果我输入101010101010它应该等于AAA,但它不起作用。如果一次少于两个字母,它只会返回字母。例如,如果我输入“10101010”,它就可以工作。 (它返回AA)。请帮忙?C程序转换二进制数为十六进制不能转换两个以上的二进制数,如果他们等于十六进制字母

#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. */ 
} 
+1

int32的最大值是'2147483647'。 '2147483647' <''101010101010' – BLUEPIXY 2014-11-02 23:35:13

回答

2

你不显示完整的程序 - n未在任何main范围中声明。假设int n,你的第一个问题是在这里:

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

你正在阅读一和零的字符串作为基数10(十进制)的整数。相反,你应该写一个函数,它需要一个const char *并遍历每个字符,验证它是1或0,解释每个人的价值,并累计总和。提示:从右到左顺序工作可能会更容易。

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

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

    return total; 
} 

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

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

我们真正喜欢使用十六进制的原因是,十六进制值中的每个字符只表示一个半字节,这正好是四位。这意味着每个四个1或0的组恰好对应一个十六进制字符。假设你的输入总是4个字符的倍数,你可以很容易地处理一个任意长的字符串。

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

Jonathon,谢谢你,我还不是很擅长编程,但是我明白你在说什么。我感谢你的时间和帮助! – user3047983 2014-11-02 23:48:07

相关问题