繁体   English   中英

如何将C ++代码转换为Delphi

[英]How to translate c++ code to 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);

我只是不确定这是正确的。 有人知道吗?

您不应该尝试进行直接转换,尤其是在混合使用指针/数组算术的情况下。

一些注意事项:

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

某些代码是Unidiomatic 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); inp[k] := ...; Inc(k); 还要注意使用>= 我不建议仅将Boolean => Single转换为1.00.0 ,但是我缺乏上下文来建议更好的设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM