数値を10進数から16進数(または基数10から基数16)に変換する例をいくつか見てきましたが、実行しようとしていることにはいくつかの制限があります。10進数の文字列を16進数の別の文字列に変換できる必要があります。数値が大きすぎてプリミティブデータ型に収まらない可能性があります。つまり、int、unsigned ints、doubleなどを使用できません。
これにより、このページにリストされているのと同じ計算を実行できるはずです。http://www.kaagaard.dk/service/convert.htm
私はこれを試しましたが、うまくいきませんでした。
関数の呼び出し:
const int maxLen = 256;
char destination[maxLen];
int retVal = convertBase(destination, maxLen, "123487032174829820348320429437483266812812");
関数の定義:
int convertBase(char* dest, int maxDestLength, const char* inputInBase10)
{
const char lookUpTable[] = { "0123456789abcdef" };
const std::string input = inputInBase10;
const unsigned int inputSize = input.length();
std::string output;
output.reserve(2 * inputSize);
for(unsigned int i = 0; i < inputSize; ++i)
{
const unsigned char c = input[i];
output.push_back(lookUpTable[c >> 4]);
output.push_back(lookUpTable[c & 15]);
}
if(output.length() < maxDestLength)
strcpy_s(dest, output.length(), output.c_str());
else
strcpy_s(dest, maxDestLength, output.c_str());
cout << dest << endl;
return strlen(dest);
}
予想される16進数:「16ae5514d07e120126dfbcb3073fddb2b8c」
生成された実際の16進数:「313233343837303332313734383239383230333438333230343239343337343833323636383132383132」
また、char *に戻すときにバッファが小さすぎるというエラーが発生し続けます(以下で繰り返します)
if(output.length() < maxDestLength)
strcpy_s(dest, output.length(), output.c_str());
else
strcpy_s(dest, maxDestLength, output.c_str());