繁体   English   中英

将“ unsigned char *”转换为“ char *”(和字符串)

[英]Converting “unsigned char *” to “char *” (and string)

我正在使用libsodium库进行一个宠物项目,发现将未签名的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等其他环境下工作),我将不胜感激。

您对此有过多的思考。

复制是多余的,额外的动态分配和空终止符也是多余的(因为std::string的构造函数仅在这种情况下接受length参数)。

可以使用各种char作为别名,因此很简单:

std::string string_from_uchar(const unsigned char * c, unsigned long long lc)
{
    return std::string((const char*)c, lc);
}

实际上,如果使用带范围的构造函数,则甚至不需要强制转换:

std::string string_from_uchar(const unsigned char * c, unsigned long long lc)
{
    return std::string(c, c + lc);
}

它甚至不保证自己发挥作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM