【发布时间】:2018-10-20 08:05:57
【问题描述】:
我需要使用RFC2617 和RFC1321 中描述的方法,但在将 C 转换为 C++ 时遇到问题。大多数情况下,我对参数定义为unsigned char 有问题,但参数是char* 变量。
我可以使用reinterpret_cast 解决错误,但我认为会有更好的方法,因为需要做很多更改。
例如在md5c.c下面的行中,变量pszUserName被声明为char*,如果变量改为unsigned char*,那么strlen就会出错:
IN char * pszUserName,
...
MD5Update(&Md5Ctx, pszUserName, strlen(pszUserName));
MD5Update 声明
void MD5Update (
MD5_CTX *context, /* context */
unsigned char *input, /* input block */
unsigned int inputLen /* length of input block */
)
{
...
}
我首先得到了这个错误:
../Dig/digcalc.cpp: In function ‘void DigestCalcHA1(char*, char*, char*, char*, char*, char*, char*)’:
../Dig/digcalc.cpp:44:58: error: invalid conversion from ‘char*’ to ‘unsigned char*’ [-fpermissive]
MD5Update(&Md5Ctx, pszUserName, strlen(pszUserName));
Github也有不错的文案
【问题讨论】:
-
您可以使用编译器标志
-Wno-pointer-sign来抑制这些消息 -
使用
vector<unsigned char>,它解决了strlen()不起作用的问题。无论如何,我可以猜到你的问题是什么,即使描述有点模糊,但为了提出解决方案,我需要更广泛地了解你在做什么。可能范围太广,无法在此处发布。 -
建议使用“引用”参数而不是指针参数
-
@user3629249,你能给我举个例子吗?
-
如果您了解 C++,那么您会在函数签名中的参数名称之后了解
&。这样的&允许被调用函数访问调用函数中的原始数据,而无需传递地址,也不必让我们*取消引用地址指针。这就是简单的解释。
标签: c++ c type-conversion