[英]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.0
和0.0
,但是我缺乏上下文来建议更好的设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.