crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Тема закрытаНачать новую тему
> Проблема с boost::crc_32_type, boost::crc_32_type
niXman
  опции профиля:
сообщение 25.6.2008, 1:01
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Кто нибудь использовал се чудо?
У меня результат не сходится со стандартными утилитами.
Вот код:
        U32 crc = 0;
        const U32 DEFAULT_BUFFER_SIZE = 1024*32;
    boost::crc_32_type CRC32;
    
    char* buf = new char[DEFAULT_BUFFER_SIZE+1];
    
    QFile file( "any.bin" );
    Q_ASSERT( file.open(QIODevice::ReadOnly) );
    while ( !file.atEnd() ) {
        rd = file.read(buf, DEFAULT_BUFFER_SIZE );
        CRC32.process_bytes( buf, rd );
        
    }
    delete buf;
    
    crc = CRC32.checksum();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 25.6.2008, 8:31
Сообщение #2


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


А ты проверь сходится результат с данным прримером:
//  Boost CRC example program file  ------------------------------------------//

//  Copyright 2003 Daryle Walker.  Use, modification, and distribution are
//  subject to the Boost Software License, Version 1.0.  (See accompanying file
//  LICENSE_1_0.txt or a copy at <http://www.boost.org/LICENSE_1_0.txt>.)

//  See <http://www.boost.org/libs/crc/> for the library's home page.

//  Revision History
//  17 Jun 2003  Initial version (Daryle Walker)

#include <boost/crc.hpp>  // for boost::crc_32_type

#include <cstdlib>    // for EXIT_SUCCESS, EXIT_FAILURE
#include <exception>  // for std::exception
#include <fstream>    // for std::ifstream
#include <ios>        // for std::ios_base, etc.
#include <iostream>   // for std::cerr, std::cout
#include <ostream>    // for std::endl


// Redefine this to change to processing buffer size
#ifndef PRIVATE_BUFFER_SIZE
#define PRIVATE_BUFFER_SIZE  1024
#endif

// Global objects
std::streamsize const  buffer_size = PRIVATE_BUFFER_SIZE;


// Main program
int
main
(
    int           argc,
    char const *  argv[]
)
try
{
    boost::crc_32_type  result;

    for ( int i = 1; i < argc; ++i )
    {
        std::ifstream  ifs( argv[i], std::ios_base::binary );

        if ( ifs )
        {
            do
            {
                char  buffer[ buffer_size ];

                ifs.read( buffer, buffer_size );
                result.process_bytes( buffer, ifs.gcount() );
            } while ( ifs );
        }
        else
        {
            std::cerr << "Failed to open file '" << argv[i] << "'."
             << std::endl;
        }
    }

    std::cout << std::hex << std::uppercase << result.checksum() << std::endl;
    return EXIT_SUCCESS;
}
catch ( std::exception &e )
{
    std::cerr << "Found an exception with '" << e.what() << "'." << std::endl;
    return EXIT_FAILURE;
}
catch ( ... )
{
    std::cerr << "Found an unknown exception." << std::endl;
    return EXIT_FAILURE;
}
???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 25.6.2008, 13:28
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


ViGOur, Вобла, сходится. Чё я намудрил? :unknown:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 25.6.2008, 14:14
Сообщение #4


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(niXman @ 25.6.2008, 2:01) *
char* buf = new char[DEFAULT_BUFFER_SIZE+1];
Зачем тебе +1? Достаточно и:
char* buf = new char[DEFAULT_BUFFER_SIZE];

:)

Цитата(niXman @ 25.6.2008, 2:01) *
delete buf;
В корне не правильно, нужно: delete []buf;

И еще в примере выводится результат в 16'тиричной, а у тебя в 10'точной.

Сообщение отредактировал ViGOur - 25.6.2008, 14:46
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.6.2008, 14:23
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


ViGOur, а ты тоже +1 написал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 25.6.2008, 14:35
Сообщение #6


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(ViGOur @ 25.6.2008, 15:14) *
В корне не правильно, нужно: delete []buf;

Да, уже понял. Исправил. Но результат тот-жэ! Почему?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ViGOur
  опции профиля:
сообщение 25.6.2008, 14:46
Сообщение #7


Мастер
******

Группа: Модератор
Сообщений: 3296
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 4

Спасибо сказали: 231 раз(а)




Репутация:   40  


Цитата(Litkevich Yuriy @ 25.6.2008, 15:23) *
ViGOur, а ты тоже +1 написал
:lol:
Скопировать скопировал, а поправить забыл. :)

Поправил.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 25.6.2008, 14:57
Сообщение #8


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Ну для начала сделай одинаковые условия тестирования
1) проверь, что файл открывается один и тот же
2) проверь режим в котором открывается файл (binary)
3) размер тестового буфера должен быть одинаковым
4) пиши буфер в два файла, сравни их в конце

Пилите Шура, пилите ;)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 25.6.2008, 15:29
Сообщение #9


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Andrew Selivanov, Вот так условия :o
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
niXman
  опции профиля:
сообщение 25.6.2008, 16:26
Сообщение #10


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


ВСЕМ ВСЕМ ВСЕМ !!!
А проблема-то вовсе не в boost-е. Просто я впервые Студию юзаю, и дебаггер ее. Кодю для Лин в основном. Вот то значение что у меня не сходилось, это я в дебаггере пялил. Вот *опа эти отладчики!!!
Огромное Спасибо. Простите за беспокойство.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 14:40