uint32_t类型的C++等式未进行比较
C++ equality for uint32_t type not comparing
我正在读取RFID卡,并试图比较ID,因为一旦卡通过读卡器,读卡器实际上会读取不止一次,所以我需要丢弃重复的ID。
更新:以下代码获取卡ID的
uint32_t IndentifyTag(Adafruit_PN532 rfidReader)
{
uint8_t tagID[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t tagIDLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
uint32_t cardid = tagID[0];
boolean success = rfidReader.readPassiveTargetID(PN532_MIFARE_ISO14443A, &tagID[0], &tagIDLength);
if (success) {
// Display some basic information about the card for testing
Serial.println("Found an ISO14443A card");
Serial.print(" UID Length: "); Serial.print(tagIDLength, DEC); Serial.println(" bytes");
Serial.print(" UID Value: "); rfidReader.PrintHex(tagID, tagIDLength);
if (tagIDLength == 4)
{
// Mifare Classic card
cardid <<= 8;
cardid |= tagID[1];
cardid <<= 8;
cardid |= tagID[2];
cardid <<= 8;
cardid |= tagID[3];
Serial.print("Mifare Classic card #");
Serial.println(cardid);
}
Serial.println("");
}
return cardid;
}
在switch语句的情况下,我测试标签是否相等,如下所示:
uint32_t priorTag = 0000000;
tag = IndentifyTag(entryRFIDReader);
if (tag == priorTag)
{
Serial.println("These tags are the same!!!");
}
if (tag != priorTag)
{
Serial.println("I got here!");
tagCount += 1;
}
priorTag = tag;
SSerial.println("tagCount = "); Serial.println(tagCount);
问题是,即使读卡器一次读取同一张卡3或4次,它们也永远不会相等,因此tagCounter正在计算重复次数。tag和priorTag的类型都是uint32_t,因此应该与==相当,但它在这种情况下不起作用。
找到一张ISO14443A卡UID长度:4字节UID值:0x92 0x77 0x88 0xBBMifare经典卡#7833787我到了!tagCount=1找到一张ISO14443A卡UID长度:4字节UID值:0x92 0x77 0x88 0xBBMifare经典卡#7833787我到了!tagCount=2找到一张ISO14443A卡Mifare经典卡#7833787我到了!tagCount=3找到一张ISO14443A卡Mifare经典卡#7833787我到了!tagCount=4
priorTag = tag;
Serial.println("******************************");
Serial.print("Prior tag: "); Serial.println(priorTag);
Serial.print("Current tag: "); Serial.println(tag);
你能解释一下,当这四行代码被执行时,你怎么可能看到这里打印的两个不同的值吗?
变量priorTag
在循环中被声明为过于局部。因此,在每次迭代开始时,它总是具有值0。
将变量priorTag
的声明移到循环之外。
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么比较运算符如此快速
- 我可以使用 g++ 进行三种比较 (<=>) 吗?
- 比较字符数组
- 将模板化的类型与C++中的某些类/类型进行比较
- C++自定义比较函数
- 如何比较自定义类的std::变体
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- std::设置自定义比较器
- 布尔比较运算符是如何在C++中工作的
- C++将目录中的所有文件与::filesystem进行比较
- shell排序中的交换和比较
- 如何在C++中比较两个char数组
- catch框架有没有办法比较流或文件
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 智能指针作为无序映射键,并通过引用进行比较
- 比较if语句中的数组值和int值
- 对于循环变体比较
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 比较两个大小不等的映射c++