21xrx.com
2024-11-05 14:39:59 Tuesday
登录
文章检索 我的文章 写文章
C++ 字符串转十六进制(Hex)
2023-06-29 19:00:44 深夜i     --     --
C++ 字符串 转换 十六进制 Hex

C++是一种高级编程语言,它具有很强的可移植性和高效性。它支持多种数据类型,包括字符串。在很多应用场景下,需要将C++字符串转换成十六进制(Hex)格式,以实现某些操作。下面我们就来了解一下如何在C++中实现字符串转十六进制的操作。

首先,我们需要使用C++标准库中的stringstream类来进行字符串转换。这个类是一个输入输出流,它可以方便地进行数据类型之间的转换。我们可以使用stringstream的”<<”操作符来将C++字符串转换成unsigned int类型,然后再使用C++标准库中的hex函数来将unsigned int类型转换成十六进制字符串。

例如,我们可以使用如下代码将一个普通的字符串转换成十六进制字符串:


#include <iostream>

#include <sstream>

#include <string>

using namespace std;

int main() {

 string str = "Hello World!";

 

 stringstream ss;

 for (int i = 0; i < str.size(); i++) {

  ss << hex << (unsigned int)str[i];

 }

 

 string hex_str = ss.str();

 cout << "Hexadecimal string: " << hex_str << endl;

 return 0;

}

在这个例子中,我们将普通字符串”Hello World!”转换成了其对应的十六进制字符串。首先,我们使用stringstream类将普通字符串中每个字符的ASCII码转换成了unsigned int类型。然后,我们将它们转换成十六进制字符串,并将结果存放在了变量hex_str中。

另外,如果我们需要将一个十六进制字符串转换成普通字符串,可以使用C++标准库中的stoul函数将十六进制字符串转换成unsigned long类型,然后再使用toupper函数将其转换成大写字母形式,最后可以使用C++标准库中的bitset类将unsigned long类型转换成二进制形式,再使用char函数将其转换成字符形式。如下面的代码所示:


#include <iostream>

#include <sstream>

#include <string>

#include <bitset>

using namespace std;

int main() {

 string hex_str = "48656C6C6F20576F726C6421";

 

 stringstream ss;

 for (int i = 0; i < hex_str.size(); i += 2) {

  string byte_str = hex_str.substr(i, 2);

  unsigned long byte = stoul(byte_str, nullptr, 16);

  char ch = toupper(bitset<8>(byte).to_string()[7] +

           bitset<8>(byte).to_string()[6] * 2 +

           bitset<8>(byte).to_string()[5] * 4 +

           bitset<8>(byte).to_string()[4] * 8 +

           bitset<8>(byte).to_string()[3] * 16 +

           bitset<8>(byte).to_string()[2] * 32 +

           bitset<8>(byte).to_string()[1] * 64 +

           bitset<8>(byte).to_string()[0] * 128);

  ss << ch;

 }

 

 string str = ss.str();

 cout << "String: " << str << endl;

 return 0;

}

在这个例子中,我们将十六进制字符串”48656C6C6F20576F726C6421”转换成了其对应的普通字符串”Hello World!”。首先,我们将十六进制字符串中每两个字符组成一个字节,然后使用stoul函数将其转换成unsigned long类型。接着,我们使用bitset类将unsigned long类型转换成二进制形式,并使用char函数将其转换成字符形式。最后,我们使用stringstream类将每个字符组合成了普通字符串。注意,在将字符从二进制形式转换成字符形式时,我们需要将其转换成大写字母形式。

总之,C++支持字符串到十六进制字符串和十六进制字符串到字符串之间的转换。可以使用stringstream类和C++标准库中的hex、stoul、toupper、bitset、char等函数来进行转换。在实际编程中,应根据具体需求进行选择和使用。

  
  
下一篇: C++求取最小值

评论区

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