将MFRC522 UIDhex字节转换为可打印的十进制

我在我的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(); 

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

 54 C7 FD 5A 

但我没能将它转换为十进制:

 HEX(5AFDC754) => DEC(1526581076) 

我试图将字节数组转换为char反向,但编译器没有让我打印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个hex字节组合成一个无符号整数。

这取决于Endianess(搜索它)。

对于Big Endian:

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

对于Little Endian,颠倒uidByte位置的顺序。