转换MFRC522 UID十六进制字节到打印十进制 [英] Convert MFRC522 UID Hex Bytes to Printable Decimal

查看:2266
本文介绍了转换MFRC522 UID十六进制字节到打印十进制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用我的Arduino UNO的 MFRC522库阅读的Mifare RFID标签信息。

I'm using the MFRC522 library on my Arduino UNO to read Mifare RFID tag Info.

// Print HEX UID
Serial.print("Card UID:");
for (byte i = 0; i < mfrc522.uid.size; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
} 
Serial.println();

我有一个字节数组(4),其中包含HEX UID:

I've got a byte array(4) which contains the HEX UID:

54 C7 FD 5A

但我没把它转换为十进制:

But I've failed to convert it to Decimal:

HEX(5AFDC754) => DEC(1526581076)

我试着将字节数组转换为反向烧焦,但是编译器没有让我打印十二月

I've tried to convert the byte array to char reversely, but the compiler didn't let me print Dec.

char str[8];
int k = 0;

for (int i = 3; i >= 0 ; i -= 1) {
    char hex[4];
    snprintf(s, 4, "%x", mfrc522.uid.uidByte[i]);

    for( int t = 0; t < 4; t++ ) {
        if( (int)hex[t] != 0 )
            str[t+k] = hex[t];
    }

    k+=2;
}

Serial.println( str, DEC);

任何建议是pciated AP $ P $

Any suggestion is appreciated

推荐答案

您将需要4个十六进制字节组合成一个无符号整数。

You will need to combine the 4 hex bytes into a single unsigned integer.

这取决于字节序(搜索它)。

This depends on Endianess (search for it).

有关大端:

  unsigned int hex_num;
  hex_num =  uidByte[0] << 24;
  hex_num += uidByte[1] << 16;
  hex_num += uidByte[2] <<  8;
  hex_num += uidByte[3];

有关小端,反向uidByte位置的顺序。

For Little Endian, reverse the order of uidByte positions.

这篇关于转换MFRC522 UID十六进制字节到打印十进制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆