Delphi->C++Builder
Вот дельфи код (оригинальный, правильный):
Цитата:
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;
}
Код:
if ((i [COLOR=red]=[/COLOR] c + 7) [COLOR=red]|[/COLOR] (LongWord(i) != BufLen-1))
Цитата:
Originally posted by rostyslav
Код:
if ((i [COLOR=red]=[/COLOR] c + 7) [COLOR=red]|[/COLOR] (LongWord(i) != BufLen-1))
В первом случае два равно нужно поставить. А во втором ?? Помоему один прямой слэш это и есть логическо И. ???
Цитата:
Originally posted by ProgMaster
В первом случае два равно нужно поставить. А во втором ?? Помоему один прямой слэш это и есть логическо И. ???
В первом случае два равно нужно поставить. А во втором ?? Помоему один прямой слэш это и есть логическо И. ???
в Delphi коде написано and.
логическое И это &&