将unsigned char * buf = NULL转换为Pascal?

时间:2011-11-01 12:06:55

标签: c++ delphi char translate pchar

我在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];

我想用这个buf分配一个PCHar值;

a:PCHar;
a:=buf.

2 个答案:

答案 0 :(得分:6)

事实上,在:

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

第一个作业*buf=NULL可以翻译为buf := nil,但它是纯粹的死代码,因为buf指针内容会立即被new函数覆盖。

所以你的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-idiomatic版本可能是:

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 :(得分:1)

也许是这样:

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];