Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Delphi->C++Builder

1.9K
29 августа 2004 года
ProgMaster
47 / / 29.08.2004
Я тут переводил по этому принципу одну функцию. Могли бы вы её проверить на ошибки ?? Ошибки конечно же в моём переводе, т.е. в С++ коде...Нужно их исправить...Я просто их найти что то не могу....
Вот дельфи код (оригинальный, правильный):
Цитата:

function DumpData(Buffer: Pointer; BufLen: DWord): String;
var
i, j, c: Integer;
begin
c := 0;
Result := '';
for i := 1 to BufLen div 16 do begin
for j := c to c + 15 do begin
Result := Result + IntToHex(PByte(Integer(Buffer) + j)^, 2);
if j = c + 7 then
Result := Result + '-'
else
Result := Result + ' ';
end;

Result := Result + ' ';
for j := c to c + 15 do
if (PByte(Integer(Buffer) + j)^ < $20) or (PByte(Integer(Buffer) + j)^ > $7F) then
Result := Result + '.'
else
Result := Result + PTChar(Integer(Buffer) + j)^;

c := c + 16;
Result := Result + #13#10;
end;

for i := c to BufLen-1 do begin
Result := Result + IntToHex(PByte(Integer(Buffer) + i)^, 2);
if (i = c + 7) and (LongWord(i) <> BufLen-1) then
Result := Result + '-'
else
Result := Result + ' ';
end;

if BufLen mod 16 <> 0 then begin
for i := 0 to 15 - (BufLen mod 16) do
Result := Result + ' ';
Result := Result + ' ';
for i := BufLen mod 16 downto 1 do begin
if (PByte(Integer(Buffer) + Integer(BufLen) - i)^ < $20) or (PByte(Integer(Buffer) + Integer(BufLen) - i)^ > $7F) then
Result := Result + '.'
else
Result := Result + PTChar(Integer(Buffer) + Integer(BufLen) - i)^;
end;
end;
end;



А вот мой перевод на С++Билдер:

Цитата:

String DumpData(Pointer Buffer, DWord BufLen)
{
int i, j, c;
String Result;
Char *PTChar;
c = 0;
Result ="";
for(i=1; i< BufLen / 16; i++) {
for (j = c; j< c+15; j++) {
Result = Result + IntToHex(*System::PByte(int(Buffer) + j), 2);
if(j==c+7)
Result = Result + "-";
else
Result = Result + " ";
}

Result = Result + " ";
for(j=c; j<c+15; j++)
if ((*System::PByte(int(Buffer) + j) < 0x20 ) || (*System::PByte(int(Buffer) + j) > 0x7f) )
Result = Result + '.';
else
Result = Result + PTChar[int(Buffer) + j];

c = c + 16;
Result = Result + "\n\r";
}

for(i=c; i<BufLen-1; i++) {
Result = Result + IntToHex(*System::PByte(int(Buffer) + i), 2);
if ((i = c + 7) | (LongWord(i) != BufLen-1) )
Result = Result + "-";
else
Result = Result + " ";
}

if (BufLen % 16 != 0 ) {
for(i=0; i<15- (BufLen % 16); i++)
Result = Result + " ";
Result = Result + " ";
for (i = BufLen % 16; i>1;i--) {
if( (*System::PByte(int(Buffer) + int(BufLen) - i) < 0x20) || (*System::PByte(int(Buffer) + int(BufLen) - i) > 0x7f) )
Result = Result + ".";
else
Result = Result + PTChar[int(Buffer) + int(BufLen) - i];

}
}
return Result;
}

368
29 августа 2004 года
rostyslav
629 / / 13.07.2004
 
Код:
if ((i [COLOR=red]=[/COLOR] c + 7) [COLOR=red]|[/COLOR] (LongWord(i) != BufLen-1))
1.9K
29 августа 2004 года
ProgMaster
47 / / 29.08.2004
Цитата:
Originally posted by rostyslav
 
Код:
if ((i [COLOR=red]=[/COLOR] c + 7) [COLOR=red]|[/COLOR] (LongWord(i) != BufLen-1))


В первом случае два равно нужно поставить. А во втором ?? Помоему один прямой слэш это и есть логическо И. ???

368
29 августа 2004 года
rostyslav
629 / / 13.07.2004
Цитата:
Originally posted by ProgMaster

В первом случае два равно нужно поставить. А во втором ?? Помоему один прямой слэш это и есть логическо И. ???



в Delphi коде написано and.

логическое И это &&

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог