如何在 C++ 中把字串轉換為十六進位制

Jinku Hu 2023年10月12日
  1. 使用 std::coutstd::hex 在 C++ 中把字串轉換為十六進位制值
  2. 使用 std::stringstreamstd::hex 在 C++ 中把字串轉換為十六進位制值
如何在 C++ 中把字串轉換為十六進位制

本文將演示如何在 C++ 中把字串轉換為十六進位制的多種方法。

使用 std::coutstd::hex 在 C++ 中把字串轉換為十六進位制值

十六進位制符號是讀取代表程式檔案、編碼格式或僅僅是文字的二進位制檔案的常用格式。因此,我們需要用十六進位制資料生成檔案內容,並根據需要輸出。

在本例中,我們將儲存的字串物件作為十六進位制字元輸出到控制檯。需要注意的是,C++ 提供了一個 std::hex I/O 操作器,可以修改流資料的數基。一個字串物件應該被分解為單個字元,然後用 std::hex 分別修改為各自的十六進位制表示。我們實現基於範圍的迴圈,對 string 字元進行遍歷,並將修改後的資料重定向到 cout 流。

#include <iostream>
#include <iterator>
#include <sstream>
#include <string>

using std::cout;
using std::endl;
using std::hex;
using std::string;
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::stringstreamstd::hex 在 C++ 中把字串轉換為十六進位制值

以前的方法缺乏在物件中儲存十六進位制資料的功能。解決這個問題的方法是建立一個 stringstream 物件,在這個物件中,我們使用迭代法插入 string 字元的十六進位制值。一旦資料在 stringstream 中,就可以構造一個新的字串物件來儲存修改後的字元資料。

注意,資料可以直接從 stringstream 物件中輸出,但在下面的示例程式碼中,採用了更簡單的形式-cout << string。另一種最終使用情況是使用標準庫的檔案系統實用程式將十六進位制資料直接寫入檔案。

#include <iostream>
#include <iterator>
#include <sstream>
#include <string>

using std::cout;
using std::endl;
using std::hex;
using std::string;
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
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ String