我正在编写一个程序,将十六进制转换为十六进制转换为十六进制。我写了两个函数: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
答案 0 :(得分: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.
答案 1 :(得分:0)
我没有足够的代表发表评论。这篇文章帮了我很多忙。如果有其他人遇到这个问题,为什么他的第二个函数不会打印,那就是他的返回声明在他的printf声明之前。如果要在这里翻转它们:
printf("in xtoi, processing %s\n", hexstring);
return dec;
然后第二个函数将打印该行。