C 如何对十六进制字符串求和
我从用户那里读取一个十六进制字符串,然后我需要计算这些数字的总和(通过将它们组合在一起)并显示结果。我不明白为什么结果不准确C 如何对十六进制字符串求和,c,C,我从用户那里读取一个十六进制字符串,然后我需要计算这些数字的总和(通过将它们组合在一起)并显示结果。我不明白为什么结果不准确 printf("Enter a string:\n"); char str[38]; scanf("%s", str); char hex [] = {"00"}; int sum = 0; int i = 0; int j = 0; for (i = 0, j = 1 ; i < 37, j<38; i ++, j++){ hex[0]= str
printf("Enter a string:\n");
char str[38];
scanf("%s", str);
char hex [] = {"00"};
int sum = 0;
int i = 0;
int j = 0;
for (i = 0, j = 1 ; i < 37, j<38; i ++, j++){
hex[0]= str[i];
hex[1] = str[j];
sum += (int) strtol(hex, NULL, 16);
}
printf("%x", sum);
printf(“输入字符串:\n”);
char-str[38];
scanf(“%s”,str);
字符十六进制[]={“00”};
整数和=0;
int i=0;
int j=0;
对于(i=0,j=1;i<37,j你想要这个:
char hex[] = { "00" };
int sum = 0;
for (int i = 0; str[i] != 0; i += 2) {
hex[0] = str[i];
hex[1] = str[i + 1];
sum += (int)strtol(hex, NULL, 16);
}
printf("%x", sum);
保持简单,不要让它变得过于复杂
您不需要两个索引
结束条件错误,您希望在输入字符串的末尾停止,而不是在输入缓冲区的末尾停止
您的迭代是不必要的模糊且不正确的。您只需要一个迭代器,但在循环中每圈应该增加2个,因为您检查了2个字符。将代码简化为:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (void)
{
char str[] = "AABBCCDD";
char hex[3] = {'\0'};
unsigned int sum = 0;
unsigned int length = strlen(str);
for (int i = 0; i<length; i+=2)
{
hex[0] = str[i];
hex[1] = str[i+1];
sum += strtol(hex, NULL, 16);
}
printf("%x", sum);
}
#包括
#包括
#包括
内部主(空)
{
char str[]=“AABBCCDD”;
字符十六进制[3]={'\0'};
无符号整数和=0;
无符号整数长度=strlen(str);
对于(int i=0;这是调试器将帮助您的时刻。for
循环的结束条件是错误的。当遇到NUL字符时,您应该结束循环。i<37的_中的警告,jI鼓励您用scanf(“%37s”,str)替换scanf;
不要冒险写出str,以防输入字符串太长long@xing奇数字符没有意义。是否应“ABC”
give0xAB+0xC
或0xA+0xBC
?如果没有定义,您不能允许奇数字符。@xing您可以检查用户输入的字符串长度%2,然后给出错误消息。@xing实际上经过再三考虑,奇数字符是没有意义的。使用“111”可以得到多少个字符
?