首页 > 解决方案 > 在 C 中反转十六进制数的程序

问题描述

我的方法:

步骤 1. 首先,我将十六进制数转换为十进制数。(十六进制到十进制逻辑)

然后我使用 ~ 运算符和 unsigned char 数据类型变量反转十进制数的位。

第 2 步。然后我将该十进制数转换为十六进制数。(十进制到六进制逻辑)

因此我得到了倒置的十六进制数。

输入和输出是十六进制数字串。

#include <stdio.h>
#include<string.h>
#include<math.h>
int
main ()
{
  long decimal, qu, rem;
  int k, j = 0;
  char hexa[100];


  int p = 0;
  int dig, temp;
  unsigned char re = 0;
  char hex[32] = "42";      //input
  int len = strlen (hex);
  len--;
  for (int i = len; i >= 0; i--)
    {
      switch (hex[i])
    {
    case 'A':
      dig = 10;
      break;
    case 'B':
      dig = 11;
      break;
    case 'C':
      dig = 12;
      break;
    case 'D':
      dig = 13;
      break;
    case 'E':
      dig = 14;
      break;
    case 'F':
      dig = 15;
      break;
    default:
      dig = hex[i] - 48;
      break;
    }
      temp = temp + dig * pow (16, p);
      p++;
      re = temp;
      re = ~re;
    }

  qu = re;

  while (qu != 0)
    {
      rem = qu % 16;
      if (rem < 10)
    hexa[j++] = 48 + rem;
      else
    hexa[j++] = 55 + rem;
      qu = qu / 16;
    }

  for (k = j; k >= 0; k--)
    {
      printf ("%c", hexa[k]);
    }
  return 0;
}

标签: chexdecimal

解决方案


#include <stdlib.h>
#include <stdio.h>

int main() {
    printf("Please enter some hex: ");
    unsigned int hex;
    // scan input as hex into an integer
    scanf("%x", &hex);
    // truncate the last byte into a char
    unsigned char c = hex;
    // invert it
    c = ~c;
    // print it back out as uppercase hex
    printf("Inverted hex: %02X\n", c);
    return 0;
}

推荐阅读