我需要使用 RFC2617 中描述的方法和 RFC1321 ,但遇到有关将 C 转换为 C++ 的问题。大多数情况下,我遇到的问题是参数定义为 unsigned char
但参数是 char*
变量。
我可以使用 reinterpret_cast
解决错误,但认为会有更好的方法,因为需要做很多更改。
例如,在 md5c.c
的下一行中,变量 pszUserName
被声明为 char*,如果变量更改为 unsigned char*
,然后 strlen
得到错误:
IN char * pszUserName,
...
MD5Update(&Md5Ctx, pszUserName, strlen(pszUserName));
MD5更新声明
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 中也有一份不错的拷贝
最佳答案
从技术上讲,char
、unsigned char
和signed char
是类型不兼容 的。代码:
MD5Update(&Md5Ctx, pszUserName, strlen(pszUserName));
“应该”是:
MD5Update(&Md5Ctx, (char *)pszUserName, strlen(pszUserName));
但是,在我看来,这很烦人。 MD5Update
在 char
上的效果与 unsigned char
一样好;我们不应该无缘无故地降低代码的可读性。
在像这样交替使用 char *
和 unsigned char *
的现有代码库上,我启用了编译器标志 -Wno-pointer-sign
不要为此感到难过。它使代码更具可读性,并且编译器的行为就像存在强制转换一样。
关于c++ - 将 C 程序转换为具有大量 char* 和 unsigned char 转换错误的 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50266343/