Предполагая, что содержание address
действительно только указатель: Вы, вероятно, можно сделать следующее:
strcmp ((char*)address, (const char*)some_char_buffer);
Но если это так, то было бы намного лучше вместо этого следует изменить адрес char*
везде:
char* address;
В зависимости от вашей кодовой базы, которая может быть более крупной. Знаете ли вы, почему это был unsigned long long
, а не указатель в первую очередь?
В качестве альтернативы, если вы хотите байт содержания address
следует рассматривать как строку: (а не содержание, которое address
может указывать на), сделайте следующее:
strcmp ((char*)&address, (const char*)some_char_buffer); // note the &
Примечание что вам понадобится последний байт в длинном, чтобы быть '\0'
в этом случае. Если это то, что вы хотите сделать, я бы рекомендовал использовать strncmp()
ограниченные по размеру долго долго вместо:
strncmp((char*)&address, (const char*)some_char_buffer,
sizeof(unsigned long long));
Я хотел бы отметить, что вы должны использовать 'intptr_t' или' uintptr_t' из 'stdint.h' для хранения значений указателя в виде целых чисел. В противном случае вы рискуете потерять точность (или, наоборот, получить точность, которая будет потеряна при обратном преобразовании и может вызвать подобные проблемы). –
Если бы не было никаких проблем, Крис, это не был бы устаревший код ... В рамках усилий по модернизации ваша рекомендация разумна. Я отмечаю, что выражение 'const char *' в вопросе, вероятно, не требуется, если 'some_char_buffer' на самом деле' unsigned char' (или, что менее вероятно, 'signed char'). –
@JonathanLeffler - У меня есть ужасная тенденция пропустить часть кода, и я полностью пропустил слова «код устаревших» в первой строке. Я чувствую себя немного глупо сейчас ... –