Преобразование C-программы в C ++ с большим количеством ошибок преобразования * и без знака - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно использовать методы, описанные в 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

1 Ответ

0 голосов
/ 10 мая 2018

Технически, 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 и нечувствую себя плохо об этом.Это делает код более читабельным, а компилятор ведет себя так, как если бы он был приведен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...