1

16 進数を 10 進数に、10 進数を 16 進数に変換するプログラムを作成しています。itox(hexstring, n) と int xtoi(hexstring) の 2 つの関数を作成しました。これら 2 つの機能は、ドライバーによって実装されます。printf を使用して int と 16 進文字列を返すと、16 進文字列が出力に表示されません。また、プログラムは xtoi() 関数内の printf ステートメントに到達していないようです。これは私が得ている出力です:

--------------:~/cs240/hw3$ gcc showxbits.c xbits.c -o showxbits
--------------:~/cs240/hw3$ ./showxbits
in itox, processing 47
                  47             0

私はCが初めてです。以下は私のコードです。アドバイスをいただければ幸いです。

ドライバーコードは次のとおりです。

  1 /*
  2  *  stub driver for functions to study integer-hex conversions
  3  *
  4  */
  5
  6 #include <stdio.h>
  7 #include "xbits.h"
  8
  9 #define ENOUGH_SPACE 100 /* not really enough space */
 10
 11 int main() {
 12   char hexstring[ENOUGH_SPACE];
 13   int m = 0, n = 47;
 14   itox( hexstring, n);
 15   printf("%s", hexstring);
 16
 17   /* for stub testing: create a fake input string*/
 18
 19   m= xtoi(hexstring);
 20
 21   printf("\t%12d %s %12d\n", n, hexstring, m);
 22
 23   return 0;  /* everything is just fine */
 24 }
 25
 26

2 つの関数のコードは次のとおりです。

  1 /*
  2  *  stubs for functions to study
  3  *  integer-hex conversions
  4  *
  5  */
  6
  7 #include <stdio.h>
  8 #include "xbits.h"
  9
 10 /* function represents the int n as a hexstring which it places in the
 11 hexstring array */
 12
 13 void itox( char hexstring[], int n) {
 14         char hexkey[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 15         int rem;
 16         int res = n;
 17         int i;
 18         for(i = 0; res < 16; i++){
 19                 rem = res%16;
 20                 res = res/16;
 21                 hexstring[i] = hexkey[rem];
 22         }
 23         i++;
 24         hexstring[i] = hexkey[res];
 25         i++;
 26         hexstring[i] = '\0';
 27
 28    printf("in itox, processing %d\t%s\n", n, hexstring);
 29 }
 30
 31 /* function converts hexstring array to equivalent integer value  */
 32
 33 int xtoi( char hexstring[]) {
 34         int cursor;
 35         int count = 0;
 36         char current;
 37         int dec = 0;
 38         int pow = 1;
 39         int i;
 40         int j;
 41         char hexkey[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
 42
 43         for(cursor = (2*sizeof(char)); cursor >= 0; --cursor){
 44                 current = hexstring[cursor];
 45                 for(i = 0; i < 16; ++i){
 46                         if(current == hexkey[i]){
 47                                 if(count == 0){
 48                                         dec = dec + i;
 49                                 }
 50                                 else{
 51                                         for(j = 0; j < count; j++)
 52                                                 pow = pow * 16;
 53                                 dec = dec + pow*i;
 54                                 pow = 1;
 55                                 }
 56                         }
 57                 }
 58                 ++count;
 59         }
 60         return dec;
 61
 62   printf("in xtoi, processing %s\n", hexstring);
 63 }
 64
4

2 に答える 2

1

一重引用符がありません

char hexkey[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
                 ^ ^


 0=='\0' ==> Nul character used to terminate strings.

 0!='0'    

'0' ASCII value 48 

ここであなたは間違っています

for(i = 0; res < 16; i++){     
               ^ 
                  rem = res%16;
                  res = res/16;
                 hexstring[i] = hexkey[rem];
         }

for ループ条件が間違っています。

   n==47 ==> res==47 and res<16 ==> 47 < 16 failed.   

このように変更

for(i = 0; res >0; i++)
         {
                  rem = res%16;
                  res = res/16;
                  hexstring[i] = hexkey[rem];
         }
                   hexstring[i] = '\0';

 printf("in itox, processing %d==%s\n", n, hexstring); // You need to reverse it.
于 2013-10-16T05:16:51.347 に答える