鱼C论坛

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

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

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

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

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

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

读取uid的代码如下
  1. #include <SPI.h>
  2. #include <MFRC522.h>

  3. #define SS_PIN 10
  4. #define RST_PIN 9

  5. MFRC522 rfid(SS_PIN, RST_PIN);    //创建MFRC522实例
  6. MFRC522::MIFARE_Key key;

  7. byte nuidPICC[4];

  8. void setup() {
  9.   Serial.begin(9600);
  10.   SPI.begin();            //初始化 SPI 总线
  11.   rfid.PCD_Init();        //初始化 MFRC522 卡

  12.   for (byte i = 0; i < 6; i++) {
  13.     key.keyByte[i] = 0xFF;
  14.   }

  15. }

  16. void loop() {

  17.   if(!rfid.PICC_IsNewCardPresent())
  18.     return;


  19.   if(!rfid.PICC_ReadCardSerial())
  20.     return;

  21.     for (byte i = 0; i < 4; i++) {
  22.       nuidPICC[i] = rfid.uid.uidByte[i];
  23.     }
  24.    
  25.     Serial.print(F("Dev1:"));
  26.     printDec(rfid.uid.uidByte, rfid.uid.size);

  27.   //暂停PICC
  28.   rfid.PICC_HaltA();
  29.   //暂停PCD上的加密
  30.   rfid.PCD_StopCrypto1();
  31. }


  32. void printDec(byte *buffer, byte bufferSize) {
  33.   for (byte i = 0; i < bufferSize; i++) {
  34.     Serial.print(buffer[i] < 0x10 ? "0" : "");
  35.     Serial.print(buffer[i], DEC);//十进制
  36.   }
  37.   Serial.println(" ");
  38. }
复制代码
如果能帮忙真的非常感谢



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

就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2021-6-14 19:49:35 | 显示全部楼层
直接用memcmp不行吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

但是uid里的是byte类型 数组里是int类型 可以互比吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

举个例子看看
你先给出一个uid,然后手动转换一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

啊..是把提前设置好的uid int数组设置为byte类型的意思吗不是很懂5555抱歉
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

就不能改成一样的吗?
把数组里的int类型改成byte类型
或者改uid类型为int
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

TT就是不太清楚怎么改orz
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://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 ?
  1. #include <SPI.h>
  2. #include <MFRC522.h>

  3. #define SS_PIN 10
  4. #define RST_PIN 9

  5. MFRC522 rfid(SS_PIN, RST_PIN);    //创建MFRC522实例
  6. MFRC522::MIFARE_Key key;

  7. byte nuidPICC[4];

  8. void setup() {
  9.   Serial.begin(9600);
  10.   SPI.begin();            //初始化 SPI 总线
  11.   rfid.PCD_Init();        //初始化 MFRC522 卡

  12.   for (byte i = 0; i < 6; i++) {
  13.     key.keyByte[i] = 0xFF;
  14.   }

  15. }

  16. void loop() {

  17.   if(!rfid.PICC_IsNewCardPresent())
  18.     return;


  19.   if(!rfid.PICC_ReadCardSerial())
  20.     return;

  21.     for (byte i = 0; i < 4; i++) {
  22.       nuidPICC[i] = rfid.uid.uidByte[i];
  23.     }
  24.    
  25.     Serial.print(F("Dev1:"));
  26.     printDec(rfid.uid.uidByte, rfid.uid.size);

  27.   //暂停PICC
  28.   rfid.PICC_HaltA();
  29.   //暂停PCD上的加密
  30.   rfid.PCD_StopCrypto1();
  31. }


  32. void printDec(byte *buffer, byte bufferSize) {
  33.   for (byte i = 0; i < bufferSize; i++) {
  34.     Serial.print(buffer[i] < 0x10 ? "0" : "");
  35.     Serial.print(buffer[i], DEC);//十进制
  36.   }
  37.   Serial.println(" ");
  38. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

!喔 我直接设置byte了 谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-27 18:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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