下面,您会看到一个程序,该程序用于在接收到任何 APDU 命令时返回 EEPROM 可用内存:
public class HelloWorld extends Applet {
public static void install(byte[] bArray, short bOffset, byte bLength) {
new helloWorld.HelloWorld().register(bArray, (short) (bOffset + 1),
bArray[bOffset]);
}
public void process(APDU apdu) {
if (selectingApplet()) {
return;
}
getAvailableMem(apdu);
}
public void getAvailableMem(APDU apdu){
byte[] buffer = apdu.getBuffer();
short[] AvailableMem = {};
UtilX.getAvailableMemoryInfo(AvailableMem, (short) 0,
UtilX.MEMORY_TYPE_PERSISTENT);
for(short i=0;i<(short)AvailableMem.length;i++){
buffer[i]=(byte)AvailableMem[i];
}
apdu.setOutgoingAndSend((short)0, (short)(2*AvailableMem.length));
}
}
但是当我向小程序发送 APDU 命令时,它返回0x6F00
:
OSC: opensc-tool -s 00a4040006010203040506 -s 00000000
Using reader with a card: ACS CCID USB Reader 0
Sending: 00 A4 04 00 06 01 02 03 04 05 06
Received (SW1=0x90, SW2=0x00)
Sending: 00 00 00 00
Received (SW1=0x6F, SW2=0x00)
请注意,我还使用以下循环尝试了上述程序:
for(byte i=0;i<(byte)AvailableMem.length;i++){
buffer[i]=(byte)AvailableMem[i];
}
它也编译成功!编译器不应该将数组索引的类型限制为byte
only 还是short
only?为什么它接受两种类型的索引?
- 第二个程序在 OpenSCTool 中具有相同的输出。怎么了?