寻找比较两个
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] 举报,一经查实,本站将立刻删除。