用C

2014-02-23 83 views
0

ASCII轉換爲二進制因此,這裏是我的代碼用C

void ascToBinary(int character, int *ones) 
{ 
    if(character == 1) 
    { 
     printf("1"); 
     *ones+=1; 
     return; 
    } 
    else 
    { 
     if((character%2) == 0) 
     { 
      printf("0"); 
      character = character/2; 
     } 
     else 
     { 
      printf("1"); 
      character = character/2; 
      *ones+=1; 

     } 
     binaryPrinter(character, ones); 
    } 
} 

任何人都可以嘗試幫助我在哪裏什麼是錯在這裏。它編譯得很好,並確保一些ASCII字母正確。如果你嘗試'e',雖然它會打印出'1010011'而不是正確的二進制文件。

所有幫助讚賞謝謝你。

+0

如果還不清楚我在這裏努力的inputed字符轉換爲二進制。這是我通過遞歸函數大聲朗讀的唯一方式,並且對於這些參數必須是無效的。 – 3kings

回答

4

打印結果的順序錯誤。正確的輸出是'1100101'。你可以將其翻轉像這樣:

void ascToBinary(int character, int *ones) 
    { 
     if(character == 1) 
     { 
      printf("1"); 
      *ones+=1; 
      return; 
     } 
     else 
     { 
      char out; 
      if((character%2) == 0) 
      { 
       out = '0'; 
       character = character/2; 
      } 
      else 
      { 
       out = '1'; 
       character = character/2; 
       *ones+=1; 

      } 
      ascToBinary(character, ones); 
      putchar (out); 
     } 
    } 
+0

現在我覺得啞巴:(哈哈,謝謝,我會接受你的答案在幾個 – 3kings

1

要打印的字符的位在倒車時,因爲你開始用最少的顯著位打印。

因此,在e上調用時,函數的期望值爲1010011,這正是您所得到的值。

1

轉換的整數二進制

版本1 - 會打印出二進制結果

void to_bin(int value) 
{ 
    char base_range[] = "01"; 

    if (value >= 2) { 
     to_bin(value/2); 
    } 

    printf("%c", base_range[value % 2]); 
} 

2版 - 將返回二進制字符串結果

void to_bin_str(int value, char *res, int *p) 
{ 
    char base_range[] = "01"; 

    if (value >= 2) { 
     to_bin_str(value/2, res, p); 
    } 

    res[(*p)++] = base_range[value % 2]; 
} 

char* convert(int value) 
{ 
    char* result = (char*)malloc(sizeof(char) * 32); 
    int i = 0; 

    to_bin_str(value, result, &i); 
    result[i] = '\0'; 

    return (result); 
} 

3版 - 將轉換爲2的任何基地16,處理底片爲基數10

void to_base(int value, int base, char *res, int *p) 
{ 
    char base_range[] = "ABCDEF"; 

    if (value >= base || value <= -base) { 
     to_base(value/base, base, res, p); 
    } 

    res[(*p)++] = base_range[abs(value % base)]; 
} 

char* convert(int value, int base) 
{ 
    char *result = (char*)malloc(sizeof(char) * 32); 
    int i = 0; 

    if (base < 2 || base > 16) 
     return (NULL); 

    if (base == 10 && value < 0) 
     result[i++] = '-'; 

    to_base(value, base, result, &i); 
    result[i] = '\0'; 

    return (result); 
} 
+0

Guillaume,謝謝你的編輯! –