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

Jinku Hu 2023年1月30日 2021年1月4日
  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 <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::stringstreamstd::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
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

相關文章 - C++ String