将 MFRC522 UID 十六进制字节转换为可打印的小数
Convert MFRC522 UID Hex Bytes to Printable Decimal
我正在使用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 位置的顺序。
相关文章:
- 如何循环打印顶点结构
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 打印双精度的整个非小数部分
- C 打印一个分子和分母的小数
- C 如何用逗号(而不是点)在文件中打印一个双小数号
- 使用 cout 打印一个(浮点)小数
- 将 MFRC522 UID 十六进制字节转换为可打印的小数
- 打印/放置具有所需小数位数的浮点值
- 如何打印具有正确有效小数位数的C++双精度
- 如何在C++中使用 cout 打印带有 2 位小数的浮动
- 如何在Qt中打印所有小数的双精度
- "双倍"不打印小数
- 无法打印更多圆周率的小数
- 打印浮点精度为 2,但在C++中没有小数 (.)
- 为什么它不打印完整的小数?
- 从浮点值中打印2位小数
- 使用% f++打印正确的小数点数
- 将浮点数打印为小数并修复错误输出
- 打印时缺少小数
- 使用 cout 打印正确的小数点数