【发布时间】:2018-02-22 02:41:15
【问题描述】:
我正在一台非常旧的机器上工作,我用来编译我的C++ 可执行文件的SDK 不支持string,所以我需要使用char arrays。
此代码适用于将string 转换为hex
std::string string_to_hex(const std::string& input)
{
static const char* const lut = "0123456789ABCDEF";
size_t len = input.length();
std::string output;
output.reserve(2 * len);
for (size_t i = 0; i < len; ++i)
{
const unsigned char c = input[i];
output.push_back(lut[c >> 4]);
output.push_back(lut[c & 15]);
}
return output;
}
但该函数适用于 string 数据类型,我无法使用。
我也尝试过使用它,但无济于事。
char *hextostrTest(char *hexStr)
{
size_t len = strlen(hexStr);
int k = 0;
if (len & 1) return NULL;
char* output = new char[(len / 2) + 1];
for (size_t i = 0; i < len; i += 2)
{
output[k++] = (((hexStr[i] >= 'A') ? (hexStr[i] - 'A' + 10) : (hexStr[i] - '0')) << 4) |
(((hexStr[i + 1] >= 'A') ? (hexStr[i + 1] - 'A' + 10) : (hexStr[i + 1] - '0')));
}
output[k] = '\0';
return output;
}
【问题讨论】:
-
你试过 string.c_str() 吗?
-
@HyunIKim 如上所述,由于这个旧的损坏的 SDK,我无法使用字符串数据类型,但它是唯一可用于我正在使用的旧机器的 SDK,所以我需要处理它。我只能使用 char 数组
-
为什么不只是替换
string部分,而是重写整个函数? -
@appleapple 因为移植
reserve()和push_back()函数来处理 char 数组会很麻烦。 -
你用分配内存替换
reserve(),push_back很容易实现。无论如何,如果您有hextostr和std::string,请发布。string_to_hex无济于事