Добавление шестнадцатеричных значений из ввода символов в c
Я должен сделать программу, которая принимает ввод символов из файла, генерирует их шестнадцатеричное значение и складывает их шестнадцатеричные значения вместе (8-битная контрольная сумма).
Входные данные :
while(fscanf(ifp, "%c", buffer) != EOF)
{
input[i] = *buffer;
printf("%02x", input[i]);
i++;
}
Например, если вход "a", начальный выход должен быть: 610a (0a для символа новой строки). После сложения их вместе вы получите 6b. И с "aa" начальный вывод должен быть: 61610a и "cc" как результат сложения.
До сих пор я сделал программу, которая читает char-by-char и сохраняет ее. Затем я сделал рекурсивную функцию для добавления символов вместе
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 перед некоторыми результатами. Я знаю, что это переполнение от сложения их вместе, но как мне избавиться от этого.
Входные данные: а, аа, ааа, аааа, ааааа
[Терминальный выход] [1]
MacbookPro: CheckSum $./a.out i1.txt 8 610а 6b MacbookPro: CheckSum $./a.out i2.txt 8 61610a ffffffcc MacbookPro: CheckSum $./a.out i3.txt 8 6161610a 2d MacbookPro: CheckSum $./a.out i4.txt 8 616161610a ffffff8e MacbookPro: CheckSum $./a.out i5.txt 8 61616161610a ffffffef
1 ответ
Попробуй это:
#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