2016-06-02 6 views
1

Я программист Java и пытаюсь изучить C++. У меня есть работающая функция CRC32, но она берет символы из массива и вычисляет CRC32.Прочтите файл для CRC32

Я хочу прочитать файл и вычислить файл CRC32.

Должен ли я прочитать файл, разбить его и поместить все данные в массив или есть ли какие-либо простые способы?

unsigned int crc32(unsigned char *message) { 
int i, j; 

unsigned int byte, crc; 

i = 0; 
crc = 0xFFFFFFFF; 
while (message[i] != 0) { 
    byte = message[i]; // Get next byte. 

    crc = crc^byte; 

    for(j = 7; j>=0; j--){ 
    crc = (crc >> 1)^(crc & 1 ? 0xEDB88320 : 0); 
    } 
    i = i + 1; 
} 
    return ~crc; 
} 

int main() 
{ 
unsigned char a[] = {'e',0}; 

cout << std::hex <<"0x" << crc32(a); 

return 0; 

} 

ответ

1

Вы можете загрузить файл в одном куске с Fread или потоковыми API, и применить функцию CRC32 на этом. Или вы можете загрузить его на куски и применить функцию таким образом. Для файлов выше определенного размера, это лучший способ обойти, хотя вы можете получить довольно большие размеры, не требуя каких-либо chuncking (благодаря x64 больших адресных пространствах, виртуальной памяти, обрабатываемой ОС, сопоставлению памяти и т. Д.).

В целом, независимо от языков программирования, применяются те же принципы для разработки программ, что более или менее - то, что вы получаете при переключении языков, - это разные API-интерфейсы, разные абстракции (хотя все больше и больше языков, похоже, сходятся на одном и том же множестве ориентации объектов на основе классов, lambdas, async/await и т. д.). Тот же совет будет действителен для Python, Java, C++, Ruby и т. Д.

Смежные вопросы