C++で16進数の文字列と、16進数の数値の相互変換の方法を知りたい


C++初心者です。  
[以下のようなコード](https://www.delftstack.com/ja/howto/cpp/string-to-hex-
cpp/)で、文字列を16進数文字列に変換しました。

[code]

    #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 << s2 << endl;
    
        return EXIT_SUCCESS;
    }
    
[/code]

上記のコードを実行すると、変数`s2`は`"546869732077696c6c20626520636f6e76657274656420746f2068657861646563696d616c"`であることが分かります。

その後に、その変数`s2`を16進数文字列を、16進数の数値に変換して、16進数同士の足し算の計算などをし、再度16進数の文字列に戻したいのですが、どうしたら出来るのでしょうか？  
C++の16進数の数値というのはint型なのかunsignedInt型なのかなど、そのあたりから分からないので知りたいです。




C++言語に用意されている[数値型は64bit程度](https://ja.cppreference.com/w/cpp/language/types)です。  
64bitというと、16進数文字列で8文字、元の文字列では4文字分でしかありません。

それ以上の桁数の計算を行うのであれば、ご自身で自作するか、外部のライブラリを使用することになります。行いたい演算にもよりますが、例えば[Boost.Multiprecision](https://www.boost.org/doc/libs/1_75_0/libs/multiprecision/doc/html/index.html)なんかが使えるかもしれません。

* * *

ちなみに、[先の回答](https://ja.stackoverflow.com/a/75249/4236)で

> C++言語において文字とは文字コードを値に持つ数値でもあります。

説明しました。16進数文字列に対して演算を行う必要はなく、元の文字列を数値として扱い、直接演算した方が効率的です。（そうだとしても、64bitで8文字分ですが…。）




C++言語に用意されている[数値型は64bit程度](https://ja.cppreference.com/w/cpp/language/types)です。  
64bitというと、16進数文字列で8文字、元の文字列では4文字分でしかありません。

それ以上の桁数の計算を行うのであれば、ご自身で自作するか、外部のライブラリを使用することになります。行いたい演算にもよりますが、例えば[Boost.Multiprecision](https://www.boost.org/doc/libs/1_75_0/libs/multiprecision/doc/html/index.html)なんかが使えるかもしれません。

* * *

ちなみに、[先の回答](https://ja.stackoverflow.com/a/75249/4236)で

> C++言語において文字とは文字コードを値に持つ数値でもあります。

説明しました。16進数文字列に対して演算を行う必要はなく、元の文字列を数値として扱い、直接演算した方が効率的です。（そうだとしても、64bitで8文字分ですが…。）

