我正在编写一个将十六进制转换为 dec 并将 dec 转换为十六进制的程序。我写了两个函数:itox(hexstring, n) 和 int xtoi(hexstring)。这两个功能由驱动程序实现。当我使用 printf 返回 int 和 hexstring 时,hexstring 永远不会出现在输出中。此外,该程序似乎永远不会进入 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
这两个函数的代码是:
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