Преобразование десятичного числа в шестнадцатеричное в C и печать массивов - PullRequest
0 голосов
/ 13 апреля 2019

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

Я пытался изменить имена переменных, но не уверен насчет текущей проблемы.

  int decNum = 0;
  int remainderDecHex = 0;
  int decHexQuotient[LENGTH_OF_STRING];
  char hexDecNum[LENGTH_OF_STRING];
  int sum = 0;
  int printNum = 0;
  int index = 0;

  while (userInputArray[index] != '\0' ) {
    decHexQuotient[index] = userInputArray[index];

    index ++;
    while ( decHexQuotient[index] != 0) {
      sum = sum + (decHexQuotient[index] %16);
      // Convert integers into characters

      if (sum < 10) {
        sum = sum + 48;
      } else {
        sum = sum + 55;
      }

      decHexQuotient[index] = decHexQuotient[index] + (decHexQuotient[index]/16);
      index ++;
    }

    printf("The hexadecimal Number is: ");

    for (printNum = printNum -1; printNum > 0; printNum --) {
      printf("%c",hexDecNum[printNum] );
    }

Я бы ожидал, что он напечатает шестнадцатеричное число, но ничего не печатает, userInputArray - это то, что я использую для сбора информации, это массив символов. Вверху перечислены все переменные, и логика этого кода заключается в том, что я принимаю пользовательский ввод в виде строки и преобразовываю его в целое число, а затем проверяю, не превышает ли оно 10, чтобы добавить 48 в код ASCII. и то же самое в операторе else, чтобы изменить его на af для шестнадцатеричного. Кажется, главная проблема заключается в том, что он не печатает так, как я печатал массив.

Это потому, что я неправильно печатаю массив или код не работает?

Ответы [ 2 ]

0 голосов
/ 13 апреля 2019
Would this work?

int decNum [LENGTH_OF_STRING];
                  int remainderDecHex = 0;
                  int decHexQuotient [LENGTH_OF_STRING];
                  char hexDecNum [LENGTH_OF_STRING];
                  int sum[LENGTH_OF_STRING];
                  int printNum = 0;
                  int j = 0;
                  int i = 0;

                  // Option #2 

                  if ( userInputArray[index] < 10 ) {



                  }


                  // Option #1

                  // Store decimal number into decNum 
                  while (userInputArray[index] != '\0' ) {

                    decNum[index] = userInputArray[index]; 


                    index ++;

                }
                  // make a copy and store the decimal number into decHexQuotient
                  while (decNum[index] != '\0') {

                      decHexQuotient[index] = decNum[index];


                      index++;

                  }



                 // find the remainder of decHexQuotient and store it into sum
                  while (decHexQuotient[index] != '\0'){

                      sum[index] = decHexQuotient[index] %16;


                    index++;

                  }
                    // if the sum is less than 10 and not equal to zero, add 48 ascii value 
                    if ( sum[index] < 10 && sum[index] != 0){

                        hexDecNum[j++] = 48 + sum[index];

                        index++;

                    }
                        // if not less than 10 add 55 ascii value 
                        else { hexDecNum[j++] = 55 + sum[index];

                        index++;
                        // divide the decimal number by 16 
                        while (decHexQuotient[index] != '\0'){

                            decHexQuotient[index] = decHexQuotient[index] / 16;

                            index++;

                        }

                         }
    // print out the hexadecimal number 
                  printf("\nThe Hexadecimal number is: %c", hexDecNum[i]);
0 голосов
/ 13 апреля 2019
char *reverse(char *str)
{
    size_t len = strlen(str);
    char *end = str + len - 1;
    char *savedstr = str;
    char x;

    if(!str || !len) return str;

    while(end > str)
    {
        x = *end;
        *end-- = *str;
        *str++ = x;
    }
    return savedstr;
}

char tohex(long long x, char *buff)
{
    char digits[] = "01234567890ABCDEF";
    char *savedbuff = buff;
    char sign = 0; 
    if (x < 0)
    {
        sign = '-';
        x = -x;
    }

    do
    {
        *buff++ = digits[x & 0xf];
        x /= 16;
    }while(x);
    *buff++ = sign;
    if(sign) *buff = 0;
    return reverse(savedbuff);
}
...