从 c 中的 char 输入中添加十六进制值
Adding hex values from char input in c
我必须编写一个程序,从文件中获取字符输入,生成它们的十六进制值并将它们的十六进制值加在一起(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, aaaaa
[终端输出][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
2d
MacbookPro:CheckSum $ ./a.out i4.txt 8
616161610a
ffffff8e
MacbookPro:CheckSum $ ./a.out i5.txt 8
61616161610a
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;
}
输出:
a : 6b
aa : cc
aaa : 2d
aaaa : 8e
aaaaa: ef
我必须编写一个程序,从文件中获取字符输入,生成它们的十六进制值并将它们的十六进制值加在一起(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, aaaaa
[终端输出][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 2d MacbookPro:CheckSum $ ./a.out i4.txt 8 616161610a ffffff8e MacbookPro:CheckSum $ ./a.out i5.txt 8 61616161610a 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;
}
输出:
a : 6b
aa : cc
aaa : 2d
aaaa : 8e
aaaaa: ef