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

use*_*126 2 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;
Run Code Online (Sandbox Code Playgroud)

......

answers=buf[2];
Run Code Online (Sandbox Code Playgroud)

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

a:PCHar;
a:=buf.
Run Code Online (Sandbox Code Playgroud)

Arn*_*hez 6

事实上,在:

unsigned char *buf=NULL;
buf=new unsigned char[SPS*2];
Run Code Online (Sandbox Code Playgroud)

第一个赋值*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;
Run Code Online (Sandbox Code Playgroud)

一个更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;
Run Code Online (Sandbox Code Playgroud)

或直接:

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;
Run Code Online (Sandbox Code Playgroud)