我正在使用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
排序方式:很好! –