gpt4 book ai didi

java - 如何使用 JCOP 专有方法返回可用内存?

转载 作者:行者123 更新时间:2023-11-30 08:55:16 25 4
gpt4 key购买 nike

下面,您会看到一个程序,该程序被编写为在接收到任何 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 或仅 short 吗?为什么它接受两种类型的索引?

-第二个程序在 OpenSCTool 中具有相同的输出。怎么了?

最佳答案

您必须将结果存储到现有的非零长度数组中:

class MyApplet extends Applet {

short[] shorts = JCSystem.makeTransientShortArray((short)2, JCSystem.CLEAR_ON_RESET);

public void process(APDU apdu) {
//...
UtilX.getAvailableMemoryInfo(shorts, (short)0, UtilX.MEMORY_TYPE_PERSISTENT);
//...
}

您的状态代码 6F00ArrayIndexOutOfBoundsException 的未捕获实例。

您可以使用两种整数类型作为索引:byteshort,没有真正的区别(当然对于不超过 0x7F 的数组)。

关于java - 如何使用 JCOP 专有方法返回可用内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29116409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com