Моя история с программированием на C и CPython. Пожалуйста, потерпите меня здесь.
Чтобы помочь мне выучить C ++, я конвертирую одну из моих старых программ на C в ООП C ++, но она работает не так, как я хочу, чтобы она работала. Меня не волнует скорость. Я просто забочусь об обучении.
Вот мой старый C-код, который я хочу поместить в класс Checksum:
//This is the standard CRC32 implementation
//"rollingChecksum" is used so the caller can maintain the current
//checksum between function calls
unsigned int CalculateChecksum(unsigned char* eachBlock, int* sbox, long lengthOfBlock, unsigned int rollingChecksum)
{
int IndexLookup;
int blockPos;
for(blockPos = 0; blockPos < lengthOfBlock; blockPos++)
{
IndexLookup = (rollingChecksum >> 0x18) ^ eachBlock[blockPos];
rollingChecksum = (rollingChecksum << 0x08) ^ sbox[IndexLookup];
}
return rollingChecksum;
}
Итак, вот как я перевел это на код C ++:
void Checksum::UpdateStream(std::vector<unsigned char> binaryData)
{
unsigned int indexLookup;
unsigned int blockPos;
for(blockPos = 0; blockPos < binaryData.size(); blockPos++)
{
indexLookup = (this->checksum >> 0x18) ^ binaryData[blockPos];
this->checksum = (this->checksum << 0x08) ^ this->sbox[indexLookup];
}
}
Но тогда, когда я пытаюсь использовать это:
int main(int argc, char* argv[])
{
Checksum Test;
Test.UpdateStream("foo bar foobar");
std::cout << Test.getChecksum() << std::endl;
}
Я получаю эту ошибку:
1>main.cpp(7) : error C2664: 'Checksum::UpdateStream' : cannot convert parameter 1 from 'const char [15]' to 'std::vector<_Ty>'
1> with
1> [
1> _Ty=unsigned char
1> ]
1> No constructor could take the source type, or constructor overload resolution was ambiguous
Я решил использовать вышеупомянутый векторный контейнер вместо строкового класса из-за , как этот вопрос оказался в StackOverflow и потому что я хочу использовать двоичные данные здесь.
ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ: Как я могу передать и строки, и двоичные данные этому методу для вычисления его контрольной суммы? Нужно ли перегрузить его или ввести строку в main? Я полностью потерян.