привет! в общем, проблема такая: есть рабочее приложение на delphi. нужно перевести его на с++. поскольку не работает, вопрос к экспертам, может, ошибка очевидна? delphi: Code: f:=TFileStream.Create(FileName, fmOpenReadWrite); f.Seek(6,soFromBeginning); у меня в с++: Code: pFile = fopen ( FileName, "rb" ); fseek ( pFile , 6 , SEEK_SET ); и еще пару кусков: delphi: Code: l1:=byte(str[i]) shr 4; l2:=(byte(str[i]) shl 4); l2:=l2 shr 4; f.ReadBuffer(tmp,1); f.Position:=f.Position-1; tmp:=((tmp shr 4) shl 4)+l1; f.WriteBuffer(tmp,1); у меня в с++: Code: unsigned char l1 = str[i] >> 4; unsigned char l2 = str[i] << 4; l2 = l2 >> 4; unsigned char tmp; fpos_t pos; fread (&tmp,1,1,pFile); fgetpos (pFile,&pos); pos -= 1; fsetpos (pFile,&pos); tmp = ((tmp >> 4) << 4)+l1; fwrite (&tmp , 1 , 1 , pFile );
SHR - Shift Right (сдвиг битов вправо) то же, что и оператор >> в С SHL - Shift Left (сдвиг битов влево) то же, что и оператор << в С у вас в том куске кода, что на си только влево сдвиги. вот так вроде робит Code: FILE *pFile; char str[10] = {1,2,3,4,5,6,7,8,9}; pFile = fopen ( "piu.txt", "r+" ); fseek ( pFile , 6 , SEEK_SET ); int i = 0; char l1 = str[i] >> 4; char l2 = str[i] << 4; l2 = l2 >> 4; char tmp; fpos_t pos; fread(&tmp,sizeof tmp,1,pFile); fgetpos (pFile,&pos); pos -= 1; fsetpos (pFile,&pos); tmp = ((tmp >> 4) << 4)+l1; fwrite (&tmp , 1 , 1 , pFile );
вот блин! ошибка какая-то тупая, даже не знаю, как нормально сделать: мне нужно изменять файл, т.е. открыть нужно было так: pFile = fopen ( "example.bmp" , "a+" ); и, т.к. я его хочу изменить, то нужно менять начало файла fseek ( pFile , 6 , SEEK_SET ); но он никак не идет в начало: как лучше поступить? решено, туплю. нужно r+