微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何正确比较两个无符号的字符?

寻找比较两个

BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];

从IP_ADAPTER_ADDRESSES结构

其中字节在窗口中定义为typedef unsigned char BYTE;

我需要比较内存吗?

为什么国际字符sed失败,如何解决

不能读取ascii字符26?

使用Tectia从窗口传输文件到unix时如何删除ctrl M字符?

转义字符“|”错误(Linux命令)

如何为具有未caching的DMA缓冲区的字符设备文件实现splice_read

谢谢!

batch file是不必要的加倍字符字符

获取垃圾文本。 如何将字符数组variables转换为LParaMtypes?

Python:转义字符不被解释

如何获取.Net中Windows文件系统path的所有有效文件夹和文件字符的列表

从Windowsbatch file中的string中删除一个和最后一个字符

马泰奥打败了我。 他的回答是正确的。 不幸的是,我不能直接对他的帖子发表评论(我可能太新了),但是我想确认他的回答,因为到目前为止大部分答案都是不正确的。

所讨论的数据类型是一个字节数组。

不要使用等号运算符(==)来比较两个数组的值,如果您将相同的数组与自身进行比较,则只会计算为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;

这应该证明“数组”只是指向连续内存块的第一个元素的指针。 所以,当使用等号运算符来比较两个数组时,这与将两个指针相互比较是相同的。 要重新说明主要观点,如果数组不在同一个空间内,指针指向不同的地方,因此至少在等号运算符的意义上是不相等的。

我希望这是你的技能水平适当的信息:)如果不是,也许它会帮助别人。 另外,我已经有了使用C ++的乐趣,所以希望一切都是正确的。

注意:正如文档中所解释的那样, PhysicalAddress的定义是

BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];

即它是一个BYTE的数组 。 不过,你可以很容易地将它们与来自<string.h> memcmp进行比较(如果您使用的是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); }

比较? 只需使用普通的平等和/或关系比较运算符。 这种方法有什么问题吗? 为什么你突然想比较内存?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐