鱼C论坛

 找回密码
 立即注册
查看: 4401|回复: 12

[已解决]怎么把uid转化为十进制后放到数组中

[复制链接]
发表于 2021-6-14 18:06:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题 现在在做一个RC522的实验TT
想问一下要是预先将一个卡号放进一个数组里,然后在读卡的时候进行两个数组匹配,来判断是否是有效的卡,应该如何弄呢?想的头都要秃了 求助各位大佬们!

读取uid的代码如下
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9
 
MFRC522 rfid(SS_PIN, RST_PIN);    //创建MFRC522实例
MFRC522::MIFARE_Key key; 
 
byte nuidPICC[4];
 
void setup() { 
  Serial.begin(9600);
  SPI.begin();            //初始化 SPI 总线
  rfid.PCD_Init();        //初始化 MFRC522 卡
 
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
 
}
 
void loop() {
 
  if(!rfid.PICC_IsNewCardPresent())
    return;
 
 
  if(!rfid.PICC_ReadCardSerial())
    return;
 
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.print(F("Dev1:"));
    printDec(rfid.uid.uidByte, rfid.uid.size);
 
  //暂停PICC
  rfid.PICC_HaltA();
  //暂停PCD上的加密
  rfid.PCD_StopCrypto1();
}
 
 
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? "0" : "");
    Serial.print(buffer[i], DEC);//十进制
  }
  Serial.println(" ");
}
如果能帮忙真的非常感谢



最佳答案
2021-6-17 22:45:17
段软w 发表于 2021-6-17 10:39
但是uid里的是byte类型 数组里是int类型 可以互比吗

就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-14 18:08:28 | 显示全部楼层
题目若是说详细一些 就是如何从uid里按字节取出来 再去跟我设定好的数组进行相比较呢?十进制数的话
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-14 19:49:35 | 显示全部楼层
直接用memcmp不行吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-17 10:39:48 | 显示全部楼层
人造人 发表于 2021-6-14 19:49
直接用memcmp不行吗?

但是uid里的是byte类型 数组里是int类型 可以互比吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-17 10:42:05 | 显示全部楼层
段软w 发表于 2021-6-17 10:39
但是uid里的是byte类型 数组里是int类型 可以互比吗

举个例子看看
你先给出一个uid,然后手动转换一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-17 10:45:51 | 显示全部楼层
人造人 发表于 2021-6-17 10:42
举个例子看看
你先给出一个uid,然后手动转换一下

啊..是把提前设置好的uid int数组设置为byte类型的意思吗不是很懂5555抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-17 11:13:16 | 显示全部楼层
段软w 发表于 2021-6-17 10:45
啊..是把提前设置好的uid int数组设置为byte类型的意思吗不是很懂5555抱歉

你的uid是什么样子的?
这样?
0000-1234-5678-9870-0000
这样?
0000000-11111111
这样?
12-13-14-10-99-80
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-17 22:42:28 | 显示全部楼层
人造人 发表于 2021-6-17 11:13
你的uid是什么样子的?
这样?
0000-1234-5678-9870-0000

我程序里显示卡的uid
十六进制
E9 96 07 87
十进制
233 150 07 135
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-17 22:45:17 | 显示全部楼层    本楼为最佳答案   
段软w 发表于 2021-6-17 10:39
但是uid里的是byte类型 数组里是int类型 可以互比吗

就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-18 11:16:44 From FishC Mobile | 显示全部楼层
人造人 发表于 2021-6-17 22:45
就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int

TT就是不太清楚怎么改orz
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-18 11:18:12 From FishC Mobile | 显示全部楼层
人造人 发表于 2021-6-17 22:45
就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int

void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? "0" : "");
    Serial.print(buffer[i], DEC);//十进制
  }
  Serial.println(" ");
}


是把括号里的byte直接改成int吗?还是什么呢..orz
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-6-18 11:35:54 | 显示全部楼层
段软w 发表于 2021-6-18 11:18
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Ser ...

这里面都是byte呀,哪来的int ?
#include <SPI.h>
#include <MFRC522.h>
 
#define SS_PIN 10
#define RST_PIN 9
 
MFRC522 rfid(SS_PIN, RST_PIN);    //创建MFRC522实例
MFRC522::MIFARE_Key key; 
 
byte nuidPICC[4];
 
void setup() { 
  Serial.begin(9600);
  SPI.begin();            //初始化 SPI 总线
  rfid.PCD_Init();        //初始化 MFRC522 卡
 
  for (byte i = 0; i < 6; i++) {
    key.keyByte[i] = 0xFF;
  }
 
}
 
void loop() {
 
  if(!rfid.PICC_IsNewCardPresent())
    return;
 
 
  if(!rfid.PICC_ReadCardSerial())
    return;
 
    for (byte i = 0; i < 4; i++) {
      nuidPICC[i] = rfid.uid.uidByte[i];
    }
   
    Serial.print(F("Dev1:"));
    printDec(rfid.uid.uidByte, rfid.uid.size);
 
  //暂停PICC
  rfid.PICC_HaltA();
  //暂停PCD上的加密
  rfid.PCD_StopCrypto1();
}
 
 
void printDec(byte *buffer, byte bufferSize) {
  for (byte i = 0; i < bufferSize; i++) {
    Serial.print(buffer[i] < 0x10 ? "0" : "");
    Serial.print(buffer[i], DEC);//十进制
  }
  Serial.println(" ");
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-6-18 15:37:58 | 显示全部楼层
人造人 发表于 2021-6-18 11:35
这里面都是byte呀,哪来的int ?

!喔 我直接设置byte了 谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-5 12:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表