如何将c ++代码翻译成Delphi

时间:2017-09-29 03:07:11

标签: c++ delphi

我正在尝试将一些C ++代码翻译成Delphi。

C ++代码处理一些Single的数组:

const float* const inp
const float* const prWeight

我已经定义了以下类型来处理它们:

type
   TSingleArray = array of Single;
   PSingleArray = ^TSingleArray;

当C代码添加到变量时,如下所示:

inp += 5

我假设变量用第5次出现的偏移量更新 我可以将索引设置为5并访问5出现的值,如下所示:

i := 5;
PSingleArray(inp)^[i] := 0.5;

和c代码:

for (int j = 5; j; --j) {
    *inp++ += *prWeight++*ari;

可以翻译为

x := 0;
for j := 5 downto 0 do
   begin
      Inc(i);
      PSingleArray(inp)^[i] := PSingleArray(inp)^[i] +  
         PSingleArray(prWeight)^[x] * ari;
   end;

这是正确的吗?

我也在想。应:

inp[k++] = nc == 1;
inp[k++] = nc == 2;
inp[k++] = nc >= 3;

是:

 Inc(k);
 PSingleArray(inp)^[k] := Ord(nc = 1);
 Inc(k);
 PSingleArray(inp)^[k] := Ord(nc = 2);
 Inc(k);
 PSingleArray(inp)^[k] := Ord(nc = 3);

或:

 Inc(k);
 PSingleArray(inp)^[k] := Ord(nc = 1);
 PSingleArray(inp)^[k] := Ord(nc = 2);
 PSingleArray(inp)^[k] := Ord(nc = 3);

我只是不确定这是否正确。有人有线索吗?

1 个答案:

答案 0 :(得分:0)

你不应该尝试直接翻译,特别是使用混合指针/数组算法。

一些注意事项:

删除PSingleArray。 Delphi没有C指针和数组之间的隐式转换。指针上的所有算术都需要成为数组索引的算术运算。指针的副本是数组索引的副本。增量指针上的数组索引成为多个索引部分的总和。

这些代码中的一部分是单一的C代码,你不必制作更加单一的Delphi

for (int j = 5; j; --j) { 
    *inp++ += *prWeight++*ari;
}

// previous incrementing of inp went into i
for j := 0 to 4 do 
begin
  inp[i + j] := inp[i + j] + prWeight[j] * ari;
end;
i = i + 5;

请注意,C中的范围是半开的,不使用结束索引。

inp[k++] = ...使用后增量运算符。使用的索引是k的未修改值,因此变为inp[k] := ...; Inc(k);。另请注意>=的使用。我不建议仅将Boolean => Single转换为1.00.0,但我缺乏建议更好设计的背景。