我正在使用libsodium库处理pet项目,并发现将unsigned char *转换为char *比我想象的更简单。此外,我首先感到困惑,因为测试是在释放模式下传递的,稍后我意识到它们没有以调试模式传递。 于是我想出了以下内容:将“unsigned char *”转换为“char *”(和字符串)
std::string string_from_uchar(const unsigned char * c, unsigned long long lc)
{
unsigned char * cc = new unsigned char[lc+1] ;
std::strncpy((char *) cc, (char *) c, lc);
cc[lc] = 0;
char* cr = reinterpret_cast<char *> (cc);
std::string ret(cr);
delete[](cr);
return ret;
}
虽然现在通过测试,我很感激,如果有人可以检查它是否是这样做(例如以正确的方式会像另一个环境中工作gcc或clang?)。
不要混合'new'和'free()'。 –
很有可能您的测试因为某些完全不同的原因而失败,并且您已实施的修复方案是解决方案,它掩盖了潜在问题,而不是修复它。 – dasblinkenlight
排序方式:很好! –