我想比较两个字节数组。
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;
答案 0 :(得分:5)
您正在调用CompareMem
将byInputBuffer
的前256个字节与DataArray
的前256个字节进行比较。
然后您获取CompareMem
的返回值并将其传递给BoolToStr
。这会将False
映射到'0'
,将True
映射到'-1'
。
因此,结论是两个数组的前256个字节相等。因为CompareMem
返回了True
。
请注意,CompareMem
返回-1
的问题中的陈述显然不正确。这是我们困惑的一个重要部分。编程时,精度和准确度至关重要。
答案 1 :(得分:2)
我的问题是为什么CompareMem返回-1?
其他用过的声明:
leftBytes : Integer;
verify : Boolean;
这很奇怪,因为布尔值是True
或False
,而不是数字。你如何获得-1值?
在需要时,False
始终被翻译/转换为零。其他每一个值都不是假的,因此也是如此。
所以,我怀疑你误解了你的调试,而且CompareMem的结果还不错。