21xrx.com
2025-03-28 05:02:59 Friday
文章检索 我的文章 写文章
C++二进制转十六进制教程
2023-06-30 14:21:00 深夜i     370     0
C++ 二进制 十六进制 转换 教程

C++是一种非常流行的编程语言,也是很多计算机科学专业的必修课程。在C++中,不仅可以进行基本的算术计算和逻辑运算,还可以进行进制转换。其中,二进制到十六进制的转换是很常用的一个转换,因为它可以将长串的二进制数简单地表示为若干位的十六进制数。下面,我们来学习如何在C++中进行二进制转十六进制的操作。

第一步:准备工作

在编写代码之前,需要引入iostream库,并定义XXX作为二进制数。例如:

#include <iostream>
using namespace std;
string XXX="1010101010101010"; // 这里的XXX可以指定为任何二进制数。

第二步:二进制转十六进制

接下来,就是我们要学习的二进制转十六进制算法。对于每四位二进制数来说,可以进行如下的转换:

- 0000 -> 0

- 0001 -> 1

- 0010 -> 2

- 0011 -> 3

- 0100 -> 4

- 0101 -> 5

- 0110 -> 6

- 0111 -> 7

- 1000 -> 8

- 1001 -> 9

- 1010 -> A

- 1011 -> B

- 1100 -> C

- 1101 -> D

- 1110 -> E

- 1111 -> F

因此,我们可以定义一个将4位二进制数转换为16进制数的函数:

char b2h(string s) { // 将s转为16进制数
  if (s=="0000") return '0';
  if (s=="0001") return '1';
  if (s=="0010") return '2';
  if (s=="0011") return '3';
  if (s=="0100") return '4';
  if (s=="0101") return '5';
  if (s=="0110") return '6';
  if (s=="0111") return '7';
  if (s=="1000") return '8';
  if (s=="1001") return '9';
  if (s=="1010") return 'A';
  if (s=="1011") return 'B';
  if (s=="1100") return 'C';
  if (s=="1101") return 'D';
  if (s=="1110") return 'E';
  if (s=="1111") return 'F';
}

当然,还有将一整个二进制转换为十六进制的函数:

string b2h(string s) { // 将s整个转为十六进制数
  int len=s.length();
  int k=len%4; // k是首部填充0的个数
  if (k!=0) { // 如果不是4的倍数,则在前面加0
    for (int i=0;i<4-k;i++) {
      s="0"+s;
    }
    len+=4-k;
  }
  string res="";
  for (int i=0;i<len;i+=4) {
    string t=s.substr(i,4); // 取出从i处开始的4位字符
    res+=b2h(t);
  }
  return res;
}

第三步:查看结果

将上述定义的函数应用到我们准备的XXX二进制数上,就可以得到它对应的十六进制数了:

string res=b2h(XXX);
cout<<res<<endl;

完整的代码如下:

#include <iostream>
using namespace std;
char b2h(string s) { // 将s转为16进制数
  if (s=="0000") return '0';
  if (s=="0001") return '1';
  if (s=="0010") return '2';
  if (s=="0011") return '3';
  if (s=="0100") return '4';
  if (s=="0101") return '5';
  if (s=="0110") return '6';
  if (s=="0111") return '7';
  if (s=="1000") return '8';
  if (s=="1001") return '9';
  if (s=="1010") return 'A';
  if (s=="1011") return 'B';
  if (s=="1100") return 'C';
  if (s=="1101") return 'D';
  if (s=="1110") return 'E';
  if (s=="1111") return 'F';
}
string b2h(string s) { // 将s整个转为十六进制数
  int len=s.length();
  int k=len%4; // k是首部填充0的个数
  if (k!=0) { // 如果不是4的倍数,则在前面加0
    for (int i=0;i<4-k;i++) {
      s="0"+s;
    }
    len+=4-k;
  }
  string res="";
  for (int i=0;i<len;i+=4) {
    string t=s.substr(i,4); // 取出从i处开始的4位字符
    res+=b2h(t);
  }
  return res;
}
int main() {
  string XXX="1010101010101010"; // 这里的XXX可以指定为任何二进制数。
  string res=b2h(XXX);
  cout<<res<<endl;
  return 0;
}

运行结果为:

AAAA

所以,我们就成功地将二进制数1010101010101010转换为十六进制数AAAA了。

  
  

评论区

请求出错了