32桁の整数ということはlong long型でも計算しきれませんが、多倍長整数を扱うようなことをしないといけないという仕様ですか?
提示されたコードはそうではないようなので、1桁ずつ文字列にしてみます。
to_stringでは16進数表記にできないのと、C#やJAVAのようなString.format機能もないので、自作するしかなさそうです。
コード:
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <string>
#include <limits>
#include <iostream>
using namespace std;
string to_hexString(int val)
{
char buffer[std::numeric_limits<int>::digits10 + 2]; // '-' + NULL
std::sprintf(buffer, "%x", val);
return buffer;
}
int main() {
string str;
for (int i = 0; i < 32; i++) {
str += to_hexString(rand()%16);
}
cout << str;
}
またはstringstreamを使う方法も考えられます。
コード:
#include <iostream>
#include <sstream>
using namespace std;
int main() {
stringstream ss;
for (int i = 0; i < 32; i++) {
ss << std::hex << (rand()%16);
}
cout << ss.str();
}
実行結果
93e41c6e20911b9b36bc7ce94edc677e