Как сложить шестнадцатеричную строку - PullRequest
0 голосов
/ 11 февраля 2019

Я прочитал шестнадцатеричную строку от пользователя, а затем мне нужно вычислить сумму чисел (сгруппировав их вместе) и отобразить результат.Я не понимаю, почему результат не точен.

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);

Я ввел следующую строку:

137AF00A0D

... которая должна быть рассчитана следующим образом: 13 + 7A + F0 + 0A + 0A + 0D, норезультат - 3D8 вместо 19E.

Можете ли вы помочь мне?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Ваша итерация излишне неясна и неверна.Вам нужен только один итератор, но вы должны увеличить его на 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);
}

Примечательно, что в нем нет обработки ошибок для неправильного количества кусочков, неправильных символов и т. Д.

0 голосов
/ 11 февраля 2019

Вы хотите это:

  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);

Сохраняйте это простым, и не делайте его более сложным, чем необходимо.

  1. вам не нужны два индекса
  2. ваше конечное условие неверно, вы хотите остановиться в конце входной строки, а не в конце входного буфера.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...