Sac*_*n D 2 applet byte apdu smartcard javacard
我无法在字节数组中的 128 以上的索引处写入数据。代码如下。
private void Write1(APDU apdu) throws ISOException
{
apdu.setIncomingAndReceive();
byte[] apduBuffer = apdu.getBuffer();
byte j = (byte)apduBuffer[4]; // Return incoming bytes lets take 160
Buffer1 = new byte[j]; // initialize a array with size 160
for (byte i=0; i<j; i++)
Buffer1[(byte)i] = (byte)apduBuffer[5+i];
}
Run Code Online (Sandbox Code Playgroud)
它给了我错误 6F 00(这意味着到达文件结尾)。
我在用:
您的代码包含几个问题:
正如 'pst' 已经指出的那样,您使用的有符号byte值只能达到 128 - 使用 ashort代替
您Buffer1在每次调用Write1方法时都会创建一个新缓冲区。在 JavaCard 上通常没有自动垃圾收集 - 因此在安装应用程序时应该只进行一次内存分配。如果您只想处理 adpu 缓冲区中的数据,只需从那里使用它。如果您想将数据从一个字节数组复制到另一个更好的使用javacard.framework.Util.arrayCopy(..).
您正在调用apdu.setIncomingAndReceive();但忽略返回值。返回值为您提供可以读取的数据字节数。
以下代码来自 API 文档并显示了常用方法:
short bytesLeft = (short) (buffer[ISO7816.OFFSET_LC] & 0x00FF);
if (bytesLeft < (short)55) ISOException.throwIt( ISO7816.SW_WRONG_LENGTH );
short readCount = apdu.setIncomingAndReceive();
while ( bytesLeft > 0){
// process bytes in buffer[5] to buffer[readCount+4];
bytesLeft -= readCount;
readCount = apdu.receiveBytes ( ISO7816.OFFSET_CDATA );
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4282 次 |
| 最近记录: |