Перевести без знака char * buf = NULL на Паскаль? - PullRequest
2 голосов
/ 01 ноября 2011

Я работаю в Borland Delphi, и у меня есть несколько строк кода в Borland C ++ Builder. Я хотел бы перевести эти строки в исходный код Delphi.

unsigned char *buf=NULL;
buf=new unsigned char[SPS*2];
for (i=0; i<SPS*2; i++)
   buf[i]=2;

... ....

answers=buf[2];

Я хотел бы присвоить значение PCHar с этим buf;

a:PCHar;
a:=buf.

Ответы [ 2 ]

6 голосов
/ 01 ноября 2011

Фактически, в:

unsigned char *buf=NULL;
buf=new unsigned char[SPS*2];

Первое присваивание *buf=NULL может быть переведено как buf := nil, но это чистый мертвый код, поскольку buf содержимое указателя немедленно перезаписывается new function.

Таким образом, ваш код C может быть переведен так:

var buf: PAnsiChar;
    i: integer;
begin
  Getmem(buf,SPS*2);
  for i := 0 to SPS*2-1 do
    buf[i] := #2;
...
  Freemem(buf);
end;

Более Delphi-идиоматическая версия может быть:

var buf: array of AnsiChar;
    i: integer;
begin
  SetLength(buf,SPS*2);
  for i := 0 to high(buf) do
    buf[i] := #2;
  ...
  // no need to free buf[] memory (it is done by the compiler)
end;

или напрямую:

var buf: array of AnsiChar;
    i: integer;
begin
  SetLength(buf,SPS*2);
  fillchar(buf[0],SPS*2,2);
  ...
  // no need to free buf[] memory (it is done by the compiler)
end;
1 голос
/ 01 ноября 2011

Возможно, вот так:

var
  buf: array of AnsiChar;
  a: PAnsiChar;
...
SetLength(buf, SPS*2);
FillChar(buf[0], Length(buf), 2);
a := @buf[0];

Понятия не имею, что такое answers, но, предполагая, что в вашем коде C ++ это char, вы бы написали это так:

var
  answers: AnsiChar;
...
answers := buf[2];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...