подсчет контрольной суммы файла

Тема в разделе "LANGS.C", создана пользователем dps86, 26 май 2009.

  1. dps86

    dps86 New Member

    Публикаций:
    0
    есть файл. нужно подсчитать его контрольную сумму и вывести в 16ом коде.
    написал для этого небольшую прогу, параметром к которой является сам подсчитываемый файл.

    вот прога (есть левые инклюды, эксперементировал просто. особо не заморачивайтесь)

    #include <time.h>
    #include <fcntl.h>
    #include <io.h>
    #include <dos.h>
    #include <string.h>
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <ctype.h>
    #include <sys/stat.h>


    main (int argc, char *argv[])
    {
    unsigned int count=0, res=0;
    int handle, byte_read=0;

    handle = open (argv[1],O_RDWR);
    //ставим указатель чтения на начало файла
    lseek(handle, 0L, SEEK_SET);

    while(!eof(handle))
    {
    read(handle, &count,1);
    res+=count;
    byte_read++;
    }
    close(handle);
    printf("byte_read= %d\n",byte_read);
    printf("res= %x",res);

    return 0;
    }

    внизу прикреплю сам файл, для которого нужно считать.
    ОСНОВНАЯ ПРОБЛЕМА!!!!!
    считал раньше этой же прогой контрольную сумму для других файлов, все работало. (почти! все же почему то байт 0x0d она пропускала и приходилось его потом отдельно учитывать)
    считаю для файла obmen.com и почему-то читается только первые 411 байт. остальные странным образом не учитываются. помогите разобраться
     
  2. dps86

    dps86 New Member

    Публикаций:
    0
    файл
     
  3. dps86

    dps86 New Member

    Публикаций:
    0
    блин, не знаю как файл прикрепить. 2 раза пытался.
    залил на файлообменник. 512байт
    http://ifolder.ru/12312760
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Ё моё, когда же люди научаться читать мануалы. 0x0d - признак конца текстового файла.
    Открывай в бинарном режиме.
     
  5. prorok

    prorok New Member

    Публикаций:
    0
    Я обычно делаю так

    MapFileAndCheckSum(srenum_crc,&OLDCRC,&NEWCRC);
     
  6. dps86

    dps86 New Member

    Публикаций:
    0
    спасибо за подсказку. но это не отменяет моего вопроса. в том файле, что я скинул, чтение стопориться вовсе не на 0x0d.
     
  7. dps86

    dps86 New Member

    Публикаций:
    0
    кстати читал про 0x0d , что это конец текста. не думал что конец файла и конец текста одно и то же. попробую в бинарном
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    prorok
    смешная шутка с учетом что исходник а) под дос б) пе-сумма тут не при чем :lol:
     
  9. prorok

    prorok New Member

    Публикаций:
    0
    Great
    облажался)))
     
  10. Ustus

    Ustus New Member

    Публикаций:
    0
    Booster
    не, 0x0D - возврат каретки, DOS-овский перевод строки - два байта 0x0D, 0x0A, при этом первый пропускается при стандартных операциях чтения.
    А конец файла - 0x1A.
    А чтобы таких ужасов не было, файл следует открывать в двоичном режиме, т.е. с флагом O_BINARY. ;)
     
  11. Booster

    Booster New Member

    Публикаций:
    0
    Ustus
    Я в курсе, попутал, бывает.