【发布时间】:2018-11-04 20:15:33
【问题描述】:
我必须编写一个程序,从文件中获取字符输入,生成它们的十六进制值并将它们的十六进制值相加(8 位校验和)。
输入:
while(fscanf(ifp, "%c", buffer) != EOF)
{
input[i] = *buffer;
printf("%02x", input[i]);
i++;
}
例如,如果输入是“a”,那么初始输出应该是:610a(0a 表示换行符) 将它们加在一起后,您得到 6b。 加上“aa”,初始输出应该是:61610a 和“cc”作为加法的结果。
到目前为止,我已经编写了一个程序,可以逐个字符地读取并存储它。然后我做了一个递归函数把字符加在一起
char addChar(char *input, int i, int size ) {
if( i == size ) {
return 0;
}
return input[i] + addChar(input, i+1, size);
}
然后我打印。
printf("%02x\n", addChar(input, i, size)));
但是当我运行程序时,我总是在一些输出前得到一堆 f。我知道这是将它们加在一起的溢出,但我该如何摆脱它。
输入:a、aa、aaa、aaaa、aaaa
[终端输出][1]
MacbookPro:CheckSum $ ./a.out i1.txt 8 610a 6b MacbookPro:CheckSum $ ./a.out i2.txt 8 61610a ffffffcc MacbookPro:CheckSum $ ./a.out i3.txt 8 6161610a 二维 MacbookPro:CheckSum $ ./a.out i4.txt 8 616161610a ffffff8e MacbookPro:CheckSum $ ./a.out i5.txt 8 61616161610a 呸呸呸【问题讨论】:
-
显示一个最小的完整示例程序。
-
使用
unsigned char addChar(char *input, int i, int size ) -
发布完整代码包括
main()函数 -
将其更改为 unsigned char 解决了该问题。