将 MFRC522 UID 十六进制字节转换为可打印的小数

Convert MFRC522 UID Hex Bytes to Printable Decimal

本文关键字:打印 小数 转换 MFRC522 UID 十六进制 字节      更新时间:2023-10-16

我正在使用Arduino UNO上的MFRC522库来读取Mifare RFID标签信息。

// 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),其中包含十六进制 UID:

54 C7 FD 5A

但是我未能将其转换为十进制:

HEX(5AFDC754) => DEC(1526581076)

试图将字节数组反向转换为字符,但编译器不允许我打印 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);

任何建议都值得赞赏

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

这取决于恩迪亚内斯(搜索它)。

对于大端:

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

对于小端序,反转 uidByte 位置的顺序。