21xrx.com
2024-11-05 14:43:41 Tuesday
登录
文章检索 我的文章 写文章
C++二进制转十六进制教程
2023-06-30 14:21:00 深夜i     --     --
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了。

  
  

评论区

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