想要比较两个
BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
来自IP_ADAPTER_ADDRESSES Structure 的
其中byte在windows中定义为typedef unsigned char BYTE;
我需要比较内存吗?
谢谢!
答案 0 :(得分:6)
注意:PhysicalAddress
的定义,如文档中所述,是
BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
即。它是BYTE
的数组。不过,您可以使用memcmp
<string.h>
轻松比较它们(如果您使用的是C ++,则可以<cstring>
):
// The two structures
IP_ADAPTER_ADDRESSES iaa1, iaa2;
// The result of the comparison
int result;
//...
if(iaa1.PhysicalAddressLength!=iaa2.PhysicalAddressLength)
{
// We have two physical addresses of two different lengths; depending on what
// you want to do it may be an error or just a simpler case of comparison
}
else
{
// Perform the comparison
result = memcmp(iaa1.PhysicalAddress, iaa2.PhysicalAddress, iaa1.PhysicalAddressLength);
}
答案 1 :(得分:3)
比较?只需使用普通的相等和/或关系比较运算符。这种方法有问题吗?为什么你突然想要比较记忆?
答案 2 :(得分:1)
有问题的数据类型是一个字节数组。
不要使用等于运算符(==)来比较两个数组的值,如果要将相同的数组与自身进行比较,它只会求值为true。即使字节数组在每个元素上具有相同的值,但它们是不同的数组(因此驻留在内存中的不同位置),相等运算符将返回false。
本质上,数组只是内存中的指针。以下是两种声明数组的方法:
int * pointer = new int[5];
或:
int array[] = new int[5];
您可以使用以下任一方式访问第一个元素:
*pointer = 100; // Dereference the pointer to get the int at that location
或:
array[0] = 100;
你甚至可以这样做:
*array = 100;
或:
pointer[0] = 100;
这应该证明'array'只是一个指向连续内存块的第一个元素的指针。因此,当使用相等运算符将两个数组相互比较时,它与将两个指针相互比较相同。要重新迭代主要点,如果数组不在内存中的相同空间中,则指针指向不同的位置,因此至少在相等运算符方面不是“相等”。
我希望这是适合您技能水平的信息:)如果没有,也许它会帮助别人。此外,我已经有一段时间了,因为我有幸使用C ++,所以希望一切都是正确的。