簡體   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