从c中的字符输入添加十六进制值
我必须制作一个程序,从文件中获取字符输入,生成它们的十六进制值,并将它们的十六进制值相加(8位校验和) 输入:从c中的字符输入添加十六进制值,c,hex,checksum,C,Hex,Checksum,我必须制作一个程序,从文件中获取字符输入,生成它们的十六进制值,并将它们的十六进制值相加(8位校验和) 输入: while(fscanf(ifp, "%c", buffer) != EOF) { input[i] = *buffer; printf("%02x", input[i]); i++; } 例如,如果输入为“a”,则初始输出应为:610a(0a表示新行字符) 把这些加在一起,得到6b。 加上“aa”,初始输出应为:61610a和“cc” 到目前为止,我已经制
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
61610A
二维
MacbookPro:CheckSum$./a.out i4.txt 8
6161610A
ffffff8e
MacbookPro:CheckSum$./a.out i5.txt 8
6161610A
ffffffef
试试这个:
#include <stdio.h>
#include <string.h>
unsigned char addChar( const unsigned char * input, size_t i, size_t size ) {
if( i == size ) {
return 0;
}
return input[i] + addChar( input, i+1, size );
}
int main( int argc, char * argv[] ) {
{
unsigned char input[] = { 'a', '\n' };
printf( "a : %02x\n", addChar( input, 0, sizeof( input )));
}
{
unsigned char input[] = { 'a', 'a', '\n' };
printf( "aa : %02x\n", addChar( input, 0, sizeof( input )));
}
{
unsigned char input[] = { 'a', 'a', 'a', '\n' };
printf( "aaa : %02x\n", addChar( input, 0, sizeof( input )));
}
{
unsigned char input[] = { 'a', 'a', 'a', 'a', '\n' };
printf( "aaaa : %02x\n", addChar( input, 0, sizeof( input )));
}
{
unsigned char input[] = { 'a', 'a', 'a', 'a', 'a', '\n' };
printf( "aaaaa: %02x\n", addChar( input, 0, sizeof( input )));
}
(void)argc;
(void)argv;
return 0;
}
显示一个最小的完整示例程序。使用
unsigned char addChar(char*input,int i,int size)
post complete code includemain()
function将其更改为unsigned char修复了该问题。这肯定会帮助我了解更多,但im从cmd行从txt文件读入,因此它不会总是a,aa,aaa等。那么,我是否可以删除打印语句前的行,然后继续正常操作?我正在更新原始帖子,以显示我在输入中阅读的位置。实际上,这非常有效。我唯一需要更改原始代码的就是函数。我让它返回一个字符而不是未签名的字符。同时,我将输入赋值给char,而不是unsigned char。非常感谢你!
#include <stdio.h>
#include <string.h>
unsigned char addChar( const unsigned char * input, size_t i, size_t size ) {
if( i == size ) {
return 0;
}
return input[i] + addChar( input, i+1, size );
}
int main( int argc, char * argv[] ) {
{
unsigned char input[] = { 'a', '\n' };
printf( "a : %02x\n", addChar( input, 0, sizeof( input )));
}
{
unsigned char input[] = { 'a', 'a', '\n' };
printf( "aa : %02x\n", addChar( input, 0, sizeof( input )));
}
{
unsigned char input[] = { 'a', 'a', 'a', '\n' };
printf( "aaa : %02x\n", addChar( input, 0, sizeof( input )));
}
{
unsigned char input[] = { 'a', 'a', 'a', 'a', '\n' };
printf( "aaaa : %02x\n", addChar( input, 0, sizeof( input )));
}
{
unsigned char input[] = { 'a', 'a', 'a', 'a', 'a', '\n' };
printf( "aaaaa: %02x\n", addChar( input, 0, sizeof( input )));
}
(void)argc;
(void)argv;
return 0;
}
a : 6b
aa : cc
aaa : 2d
aaaa : 8e
aaaaa: ef