перевод код из delphi в с++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cepera666, 17 Mar 2011.

  1. cepera666

    cepera666 New Member

    Joined:
    22 Jan 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    привет! в общем, проблема такая: есть рабочее приложение на 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 );
    
     
    #1 cepera666, 17 Mar 2011
    Last edited: 17 Mar 2011
  2. edge911

    edge911 Active Member

    Joined:
    21 Feb 2009
    Messages:
    105
    Likes Received:
    142
    Reputations:
    15
    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 );
    
     
    #2 edge911, 17 Mar 2011
    Last edited: 17 Mar 2011
  3. cepera666

    cepera666 New Member

    Joined:
    22 Jan 2009
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    вот блин! ошибка какая-то тупая, даже не знаю, как нормально сделать:

    мне нужно изменять файл, т.е. открыть нужно было так:

    pFile = fopen ( "example.bmp" , "a+" );

    и, т.к. я его хочу изменить, то нужно менять начало файла

    fseek ( pFile , 6 , SEEK_SET );

    но он никак не идет в начало:
    как лучше поступить?


    решено, туплю. нужно r+
     
    #3 cepera666, 17 Mar 2011
    Last edited by a moderator: 18 Mar 2011