-2

我想比较两个字节数组。 byInputBuffer是我由外部设备填充的数组。每次主循环迭代都有 256 个字节,并且总是放在byInputBuffer. 它是这样声明的:

byInputBuffer: array [0..1023] of byte;

DataArray是一个动态声明大小的数组。所以数组声明如下:

DataArray  : Array of Byte;

然后在代码大小中声明如下:

 SetLength(DataArray, DataLengthInt);

其中 DataLengthInt 为 130952。

主循环从 0 迭代到 511,但是当 i=0 时,我在下面的代码中得到 BoolToStr(verify)=-1:

leftBytes := 256;

verify := CompareMem(@byInputBuffer, @DataArray[(i*256)], leftBytes);

但是我检查了两个数组的内容,当 i=0 与前 256 个元素相等时。

我的问题是为什么 CompareMem 返回 -1?

其他使用的声明:

  leftBytes : Integer;
  verify : Boolean;
4

2 回答 2

5

您正在调用CompareMem将 的前 256 个字节与 .byInputBuffer的前 256 个字节进行比较DataArray

然后,您将获取 的返回值CompareMem并将其传递给BoolToStr. 映射False'0'True'-1'

因此得出的结论是两个数组的前 256 个字节是相等的。因为CompareMem回来了True

请注意,您在CompareMem返回的问题中的陈述-1显然是不正确的。这是我们困惑的很大一部分。编程时精度和准确性至关重要。

于 2012-12-13T15:25:34.547 回答
2

我的问题是为什么 CompareMem 返回 -1?

其他使用的声明:

leftBytes : Integer;
verify : Boolean;

这很奇怪,因为布尔值是Trueor False,而不是数字。你如何得到 -1 值?

需要时,False始终转换/转换为零。其他所有值都不为假,因此为真。

所以,我怀疑你误解了你的调试,而 CompareMem 的结果很好。

于 2012-12-13T15:15:45.157 回答