c++ - 将 C 程序转换为具有大量 char* 和 unsigned char 转换错误的 C++

标签 c++ c type-conversion

我需要使用 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 中也有一份不错的拷贝

最佳答案

从技术上讲,charunsigned charsigned char类型不兼容 的。代码:

MD5Update(&Md5Ctx, pszUserName, strlen(pszUserName));

“应该”是:

MD5Update(&Md5Ctx, (char *)pszUserName, strlen(pszUserName)); 

但是,在我看来,这很烦人。 MD5Updatechar 上的效果与 unsigned char 一样好;我们不应该无缘无故地降低代码的可读性。

在像这样交替使用 char *unsigned char * 的现有代码库上,我启用了编译器标志 -Wno-pointer-sign不要为此感到难过。它使代码更具可读性,并且编译器的行为就像存在强制转换一样。

关于c++ - 将 C 程序转换为具有大量 char* 和 unsigned char 转换错误的 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50266343/

相关文章:

c++ - 如何在运行时指定数组的维数和?

c++ - 在C/C++中使用Sox录制

java - java中的字节类型转换

python - 位到字符串python

c++ - 将 float 转换为 uint64 和 uint32 行为异常

c++ - 如何找到使用 C++ 在注册表中注册的 DLL 的绝对路径?

c++ - 关于 auto_ptr 的问题

c - PAPI 和 native 事件

c - 在 C 中的 if 语句中初始化变量?

C 对链表进行冒泡排序