从Read Block APDU命令smartcardio中检索和显示值

时间:2014-01-20 14:27:33

标签: java mifare apdu smartcard-reader contactless-smartcard

我正在研究基于RFID的考勤监控系统。我使用Mifare 1k Classic作为我的RFID和ACR122u作为我的读者。我了解到您可以使用STORE VALUE BLOCK APDU命令将值存储到卡中,也可以使用READ BLOCK APDU命令读取。两个命令都返回0x90 SW1,这意味着它成功传输。我的问题是如何在读取后获取/检索存储到VALUE BLOCK的值。例如,我从块0x05存储了值“15”。现在我尝试从块0x05获取值“15”。我在这里尝试了这些代码:

CommandAPDU comm1 = new CommandAPDU(new byte[] {(byte) 0xFF,(byte) 0xB1,(byte) 0x00,(byte) 0x05,(byte) 0x04});
ResponseAPDU read1 = channel.transmit(comm1);

它成功读取了块,但它没有显示该值。我尝试使用:

System.out.println(read1.getBytes());
System.out.println(read1.getData());

但两者都显示一些随机输出,如:[B@140fee

任何人都可以帮我吗?什么是输出意味着什么?

1 个答案:

答案 0 :(得分:1)

输出[B@140fee由对象的toString()方法生成(使用println()方法打印任意对象时会隐式调用。[表示对象是一个数组类型对象。B表示数组的元素类型是Byte@符号后面的十六进制数字是对象哈希码的十六进制表示(无论数字是多少)由对象的hashCode()方法返回。

因此,为了查看收到的字节,您需要将字节数组转换为可读的字符串表示形式(例如,每个字节值的连接十六进制表示形式)。