По умолчанию stdin и stdout будут работать в текстовом режиме, переводя 0A -> 0D 0A.Вам нужно изменить main-seekzunzip для _setmode stdin и stdout как двоичный файл перед разархивацией:
int main( int argc, char *argv[] )
{
unsigned long pos = atol( argv[1] );
int status;
_setmode(0, _O_BINARY);
_setmode(1, _O_BINARY);
status = uncompressblock( 0, pos );
if ( status )
fprintf( stderr, "\n%s\n", bunzip_errors[-status] );
}
Это помогает мне с MSVC ++ 10.Возможно, вам придется потерять ведущие подчеркивания из _setmode и _O_BINARY на других компиляторах - я не уверен.Кроме этого мне нужно было:
- удалить unistd.h включает в себя
- добавить включает в себя:
- micro-bunzip.h: sys / types.h
- micro-bunzip.c: sys / types.h
- seek-bunzip.c: sys / types.h, io.h, fnctl.h
- forward-Declare get_bits, read_bunzip и start_bunzip из micro-bunzip.c в micro-bunzip.h
- изменить
write
и lseek
на _write
и _lseek
(снова может быть только MSVC)
Тогда это сработало для меня, после того, как я понял, что параметр командной строки был смещением битов (т.е. 32 для первого блока), а не смещением байтов.