[英]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.