21xrx.com
2024-06-03 05:29:15 Monday
登录
文章检索 我的文章 写文章
C++进制转换:从二、八、十、十六进制互转的实现方法
2023-07-12 07:32:35 深夜i     --     --
C++ 进制转换 二进制 八进制 十进制 十六进制

作为一门广泛应用于程序开发的编程语言,C++ 在实现进制转换方面也有着丰富的库函数和工具。在我们开发程序时,经常需要将数字在二进制、八进制、十进制和十六进制之间进行转换。以下是一些基本的实现方法,方便我们开发中的应用。

二进制转十进制

二进制数从右往左数,第 N 位的权值即为 2^(N-1)。因此,我们可以根据此进行二进制转十进制。

int binToDec(int bn) {

  int dec = 0, i = 0, rem;

  while (bn != 0) {

    rem = bn % 10;

    bn /= 10;

    dec += rem * pow(2, i);

    ++i;

  }

  return dec;

}

以上代码就是将一个二进制数 bn 转换成一个十进制数 dec 的方法。利用了 pow 函数实现了权值的计算。

十进制转二进制

十进制转二进制的过程是反着来的。我们将十进制数不断除以 2,得到的余数就是其二进制下该位上的数值,记录下来即可。

int decToBin(int dec) {

  int bn = 0, i=1, rem;

  while (dec != 0) {

    rem = dec % 2;

    dec /= 2;

    bn += rem * i;

    i *= 10;

  }

  return bn;

}

此时,得到的 bn 就是十进制数 dec 对应的二进制数。

八进制转十进制

八进制数的计算也较为简单。我们同样是从右往左,以 8 的幂次作为权值。需要注意的是:在 C++ 中,八进制数必须以 0 开头。

int octToDec(int oct) {

  int dec = 0, i = 0, rem;

  while (oct != 0) {

    rem = oct % 10;

    oct /= 10;

    dec += rem * pow(8, i);

    ++i;

  }

  return dec;

}

十进制转八进制

同样,十进制转八进制的方法就是不断进行除法运算。此时需要将余数记录至数组中,最后顺序排好即可。

int decToOct(int dec) {

  int rem[50], i = 0;

  while (dec != 0) {

    rem[i] = dec % 8;

    dec /= 8;

    ++i;

  }

  int k = i-1, oct = 0;

  while (k >= 0) {

    oct = oct*10 + rem[k];

    --k;

  }

  return oct;

}

十六进制转十进制

十六进制数转换成十进制数的方法跟二进制和八进制一样。唯一不同的是,十六进制中存在 A-F 的六个字母,需要进行特殊处理。

int hexToDec(string hex) {

  int len = hex.length();

  int base = 1, dec = 0;

  for (int i=len-1; i>=0; --i) {

    if (hex[i]>='0' && hex[i]<='9') {

      dec += (hex[i] - 48) * base;

      base *= 16;

    }

    else if (hex[i]>='A' && hex[i]<='F') {

      dec += (hex[i] - 55) * base;

      base *= 16;

    }

  }

  return dec;

}

此代码将十六进制数 hex 转换成一个十进制数 dec。其中 0-9 对应的 ASCII 码是 48-57,A-F 对应的是 65-70。我们利用了这个特性进行运算。

十进制转十六进制

最后一种转换方法同样需要注意少数特殊情况。我们将十进制数不断对 16 取模,得到的余数对应的字母即可。

string decToHex(int dec) {

  char hex[50];

  int i = 0;

  while (dec != 0) {

    int temp = 0;

    temp = dec % 16;

    if (temp < 10) {

      hex[i] = temp + 48;

      ++i;

    }

    else {

      hex[i] = temp + 55;

      ++i;

    }

    dec /= 16;

  }

  string hexStr = "";

  for (int j=i-1; j>=0; --j) {

    hexStr += hex[j];

  }

  return hexStr;

}

最后得到的 hexStr 即为十进制数 dec 转换后的十六进制数。

总结

以上是从二、八、十、十六进制互转的一些基本的实现方法。当然,C++ 有着丰富的库函数和工具,可以更方便地实现进制转换。但是,掌握这些基本方法不仅可以帮助我们更好地理解和使用库函数,同时也更有利于我们在开发中遇到特殊情况时进行应对和解决。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复