如何正确比较两个未签名的字符?

时间:2011-05-04 23:15:25

标签: c++ c windows networking char

想要比较两个

BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
来自IP_ADAPTER_ADDRESSES Structure

其中byte在windows中定义为typedef unsigned char BYTE;

我需要比较内存吗?

谢谢!

3 个答案:

答案 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 ++,所以希望一切都是正确的。