【发布时间】:2021-02-04 00:22:26
【问题描述】:
我试图将 RefPack compression implementation 移植到 Delphi,但我无法理解某些代码部分:
hashtbl = NEW int32[65536];
link = NEW int32[131072];
hashptr = hashtbl;
for (i=0; i<65536L/16; ++i)
{
*(hashptr+0) = *(hashptr+1) = *(hashptr+2) = *(hashptr+3) =
*(hashptr+4) = *(hashptr+5) = *(hashptr+6) = *(hashptr+7) =
*(hashptr+8) = *(hashptr+9) = *(hashptr+10) = *(hashptr+11) =
*(hashptr+12) = hashptr[13] = hashptr[14] = hashptr[15] = -1L;
hashptr += 16;
}
这是我的代码:
var
hashtbl: PUInt32;
hashptr: PUInt32;
GetMem(hashtbl, 65536);
GetMem(link, 131072);
hashptr := hashtbl;
for I := 0 to (65536 div 16) - 1 do
begin
?!?
hashptr := hashptr + 16;
end;
问题 1: “65536L” 这个“L”是什么意思?
问题 2: 我不知道循环内的代码是做什么的以及如何将其转录到 Delphi... 有人可以启发我吗?
Ps:我使用的是 Delphi 社区版。
【问题讨论】:
-
无关:我很难看到 C++ 代码比
memset快得多。然后我想多了,思考std::vector<int32> hashtbl(65536, -1);