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