есть файл. нужно подсчитать его контрольную сумму и вывести в 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 раза пытался. залил на файлообменник. 512байт http://ifolder.ru/12312760
Ё моё, когда же люди научаться читать мануалы. 0x0d - признак конца текстового файла. Открывай в бинарном режиме.
спасибо за подсказку. но это не отменяет моего вопроса. в том файле, что я скинул, чтение стопориться вовсе не на 0x0d.
кстати читал про 0x0d , что это конец текста. не думал что конец файла и конец текста одно и то же. попробую в бинарном
Booster не, 0x0D - возврат каретки, DOS-овский перевод строки - два байта 0x0D, 0x0A, при этом первый пропускается при стандартных операциях чтения. А конец файла - 0x1A. А чтобы таких ужасов не было, файл следует открывать в двоичном режиме, т.е. с флагом O_BINARY.