我正在使用我的Arduino UNO上的MFRC522 library来阅读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);
感谢任何建议
答案 0 :(得分:3)
您需要将4个十六进制字节组合成一个无符号整数。
这取决于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位置的顺序。