我已经看到了几个将数字从十进制转换为十六进制(或以 10 为底为 16)的示例,但我对我正在尝试做的事情有一些限制。我需要能够将带有十进制数字的字符串转换为另一个字符串作为十六进制数字。该数字可能太大而无法容纳在任何原始数据类型中 - 即:不能使用整数、无符号整数、双精度数等...
这应该能够执行与此页面上列出的相同的计算。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);
}
预期的十六进制数:“16ae5514d07e120126dfbcb3073fddb2b8c”
生成的实际十六进制数:“313233343837303332313734383239383230333438333230343239343337343833323636383132383132”
另外,当传递回 char* 时,我不断收到一个错误,即缓冲区太小(在下面重复)
if(output.length() < maxDestLength)
strcpy_s(dest, output.length(), output.c_str());
else
strcpy_s(dest, maxDestLength, output.c_str());