我正在编写从学生证中读取数据的代码。 卡初始化后,选择卡上的目录和文件,我开始用READ BINARY(B0)读取数据。
根据ISO 7816-4: Interindustry Commands for Interchange:
如果P1中的bit8 = 0,则P1 || P2是从文件开头以数据单位读取的第一个字节的偏移量。
我正在以块的形式读取数据,每个16字节。在第一个循环中,我想阅读let date = Date()
let startOfDay = Calendar.current.startOfDay(for: date)
,所以我设置offset = 0
和P1 = 0x00
,一切正常,前16个字节从卡传输。
问题从第二个循环开始,接下来的16个字节应该从P2 = 0x00
读取,所以我设置offset = 16
和P1 = 0x00
,但我从P2 = 0x10
接收数据。
经过一些测试后,我发现offset = 64
总是被解释为4个字节的偏移量。
我的卡似乎每个都使用数据单元(提到ISO 7816-4),大小为DWORD。
Web中的所有示例都将数据单元视为字节,所有内容似乎都适用于作者/用户。我的问题是:如何在应用程序运行时确定数据单元的大小?