如何在 C++ 中把字符串转换为十六进制
本文将演示如何在 C++ 中把字符串转换为十六进制的多种方法。
使用 std::cout
和 std::hex
在 C++ 中把字符串转换为十六进制值
十六进制符号是读取代表程序文件、编码格式或仅仅是文本的二进制文件的常用格式。因此,我们需要用十六进制数据生成文件内容,并根据需要输出。
在本例中,我们将存储的字符串对象作为十六进制字符输出到控制台。需要注意的是,C++ 提供了一个 std::hex
I/O 操作器,可以修改流数据的数基。一个字符串对象应该被分解为单个字符,然后用 std::hex
分别修改为各自的十六进制表示。我们实现基于范围的循环,对 string
字符进行遍历,并将修改后的数据重定向到 cout
流。
#include <iostream>
#include <string>
#include <sstream>
#include <iterator>
using std::cout; using std::endl;
using std::string; using std::hex;
using std::stringstream;
int main(){
string s1 = "This will be converted to hexadecimal";
string s2;
cout << "string: " << s1 << endl;
cout << "hexval: ";
for (const auto &item : s1) {
cout << hex << int(item);
}
cout << endl;
return EXIT_SUCCESS;
}
输出:
string: This will be converted to hexadecimal
hexval: 546869732077696c6c20626520636f6e76657274656420746f2068657861646563696d616c
使用 std::stringstream
和 std::hex
在 C++ 中把字符串转换为十六进制值
以前的方法缺乏在对象中存储十六进制数据的功能。解决这个问题的方法是创建一个 stringstream
对象,在这个对象中,我们使用迭代法插入 string
字符的十六进制值。一旦数据在 stringstream
中,就可以构造一个新的字符串对象来存储修改后的字符数据。
注意,数据可以直接从 stringstream
对象中输出,但在下面的示例代码中,采用了更简单的形式-cout << string
。另一种最终使用情况是使用标准库的文件系统实用程序将十六进制数据直接写入文件。
#include <iostream>
#include <string>
#include <sstream>
#include <iterator>
using std::cout; using std::endl;
using std::string; using std::hex;
using std::stringstream;
int main(){
string s1 = "This will be converted to hexadecimal";
string s2;
stringstream ss;
cout << "string: " << s1 << endl;
for (const auto &item : s1) {
ss << hex << int(item);
}
s2 = ss.str();
cout << "hexval: " << s2 << endl;
return EXIT_SUCCESS;
}
输出:
string: This will be converted to hexadecimal
hexval: 546869732077696c6c20626520636f6e76657274656420746f2068657861646563696d616c
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn