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”
    give
    0xAB+0xC
    0xA+0xBC
    ?如果没有定义,您不能允许奇数字符。@xing您可以检查用户输入的字符串长度%2,然后给出错误消息。@xing实际上经过再三考虑,奇数字符是没有意义的。使用
    “111”可以得到多少个字符