指向数组中的数据的指针。德尔福

时间:2012-12-13 14:23:55

标签: delphi

我想比较两个字节数组。 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时前两个元素相等。

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

其他用过的声明:

  leftBytes : Integer;
  verify : Boolean;

2 个答案:

答案 0 :(得分:5)

您正在调用CompareMembyInputBuffer的前256个字节与DataArray的前256个字节进行比较。

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

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

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

答案 1 :(得分:2)

  

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

     

其他用过的声明:

leftBytes : Integer;
verify : Boolean;

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

在需要时,False始终被翻译/转换为零。其他每一个值都不是假的,因此也是如此。

所以,我怀疑你误解了你的调试,而且CompareMem的结果还不错。