[C++] 90 10進数から16進数へ変換、大文字へ変換

[M1 Mac, Big Sur 11.6.7, clang 13.0.0, NO IDE]

C++で整数を変換するのは初めてかもしれません。大文字へ変換する関数も載せておきます。

C言語とC++のtoupper関数の違いが分からなくて苦労しました。今回はC言語の方を使っています。C++のtoupper関数は上級者向けでしょうか。型推論が効かないため正確に使わないとコンパイラからのダメ出しが止まりません。

またvectorの範囲コンストラクタというものを初めて使いましたが、最初見た時は関数なのか変数なのか文法的に矛盾しているように見えて意味が分かりませんでした。

現時点でアプリのサイズは455KBです。フル機能のJava版は45.6MBですから100分の1に収まっています。起動はもっさりから爆速になりました。実質的リファクタリングの効果もあると思います。

#include <algorithm>

using std::transform; using std::toupper;

// 大文字へ変換する関数
string capitalizeString(string s)
{
    vector<char> s_char(s.begin(), s.end());

    vector<char> s_char_up;
    for (auto && c:s_char){
        char c_up = toupper(c);
        s_char_up.push_back(c_up);
    }

    string str(s_char_up.begin(), s_char_up.end());

    return str;
}

int red = stoi(red0);
int green = stoi(green0);
int blue = stoi(blue0);

// 10進数から16進数へ変換
std::stringstream ss1;
ss1 << std::hex << red;
// 0埋めで2桁にする場合
// ss1 << std::hex << std::setw(2) << std::setfill('0') << red;
string red_hex = ss1.str();
cout << red_hex.c_str() << endl;

std::stringstream ss2;
ss2 << std::hex << green;
string green_hex = ss2.str();
cout << green_hex.c_str() << endl;

std::stringstream ss3;
ss3 << std::hex << blue;
string blue_hex = ss3.str();
cout << blue_hex.c_str() << endl;

// 大文字へ変換
string color_hex0 = red_hex + green_hex + blue_hex;
string color_hex = capitalizeString(color_hex0);
string color_zero = "0x" + color_hex;
code_input->value("");
code_input->insert(color_zero.c_str());
--------------------------------------------------
出力例
--------------------------------------------------
0xC9171E