Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解释java卡HelloWorld小程序_Java_Javacard - Fatal编程技术网

解释java卡HelloWorld小程序

解释java卡HelloWorld小程序,java,javacard,Java,Javacard,下面是一个java卡程序,当它接收到APDU命令=800000000() 我理解,但我不明白程序员为什么在以下行中使用&0XFF: byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA] & 0xFF); byte INS = (byte) (buffer[ISO7816.OFFSET_INS] & 0xFF); 为什么他通常不使用下面这一行 byte CLA = (byte) (buffer[

下面是一个java卡程序,当它接收到APDU命令=
800000000
()

我理解,但我不明白程序员为什么在以下行中使用
&0XFF

        byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA] & 0xFF);
        byte INS = (byte) (buffer[ISO7816.OFFSET_INS] & 0xFF);
为什么他通常不使用下面这一行

        byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA]);
        byte INS = (byte) (buffer[ISO7816.OFFSET_INS]);
还有一句话:

ew HelloWorldApplet().register(bArray, (short) (bOffset + 1), bArray[bOffset]);

他所说的
+1
是什么意思?

虽然我们看不出作者的意图,但这句话:

    byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA] & 0xFF);
100%相当于:

    byte CLA = buffer[ISO7816.OFFSET_CLA];
Java经常使用整数作为操作的结果,而且由于Java卡通常不支持
int
值,因此通常需要将其转换为
byte
short
。我只能猜测,
&0xFF
和cast之所以出现,是因为有人过于热心地试图去掉中间的
int
值。让Java支持无符号字节也可能是错误的尝试



register
方法需要实例帮助。该AID在Global Platform
INSTALL for INSTALL
期间提供的用户参数范围内,但它前面有一个包含AID长度的字节(5到15之间,包括5到15)。因此,
+1
是跳过长度字节-它依次出现在
寄存器
方法的最后一个参数:
bArray[bOffset]
虽然我们看不到作者的意图,但行:

    byte CLA = (byte) (buffer[ISO7816.OFFSET_CLA] & 0xFF);
100%相当于:

    byte CLA = buffer[ISO7816.OFFSET_CLA];
Java经常使用整数作为操作的结果,而且由于Java卡通常不支持
int
值,因此通常需要将其转换为
byte
short
。我只能猜测,
&0xFF
和cast之所以出现,是因为有人过于热心地试图去掉中间的
int
值。让Java支持无符号字节也可能是错误的尝试



register
方法需要实例帮助。该AID在Global Platform
INSTALL for INSTALL
期间提供的用户参数范围内,但它前面有一个包含AID长度的字节(5到15之间,包括5到15)。因此,
+1
是跳过长度字节-它依次出现在
寄存器
方法的最后一个参数中:
bArray[bOffset]

请每个问题问一个问题,这是两个。@MaartenBodewes亲爱的Marteen,请查看上面的
getHelloWorld
方法。是否正确:“作者定义了一个名为
buffer
的变量,并用APDU buffer对其进行了初始化”,对吗?那么这个用户定义的
缓冲区
不是同一个APDU缓冲区?在第三行中,他将名为
helloWorld
的变量的内容复制到另一个名为
buffer
的变量中(而不是复制到APDU缓冲区中),对吗?那么,为什么当用户在最后一行发送APDU缓冲区时(使用
setOutgoingAndSend()
),用户会收到“helloWorld”变量的内容呢?@MaartenBodewes,我知道我在某些方面错了,但我不知道它在哪里!据我对该程序的了解,程序员只更改了其定义的变量(缓冲区),而不是用于
APDU.setOutgoingAndSend
method!的实际APDU缓冲区:(那么为什么程序运行得很好?!我遗漏了什么?我应该在so中作为一个新问题提问吗?
apdu.getBuffer
会返回apdu缓冲区,您还期望其他缓冲区吗?假设这几行而不是上面的那一行(我只是更改了缓冲区的名称以明确我的问题):1:
byte[]temp=apdu.getBuffer()
2:
short length=(short)helloWorld.length;
3:
Util.arrayCopyNonAtomic(helloWorld,(short)0,temp,(short)0,(short)length);
4:
apdu.setOutgoingAndSend((short)0,length);
------在1中,我将APDU缓冲区的内容复制到名为temp的变量中。在3中,我将名为helloWord的数组的内容复制到名为temp的变量中。最后在4中,我将APDU缓冲区发送到CAD。对吗?请每个问题问1个问题,这是两个。@MaartenBodewes亲爱的Marteen,请查看
getHelloWorld
方法。是否正确:“作者定义了一个名为
buffer
的变量,并用APDU buffer对其进行了初始化”,对吗?那么这个用户定义的
buffer
不是同一个APDU buffer?在第三行,他将名为
helloWorld
的变量的内容复制到另一个名为
buffer
的变量中(而不是复制到APDU buffer中),对吗?那么,为什么他在最后一行发送APDU buffer时(使用
setOutgoingAndSend()
)用户收到“helloWorld”变量的内容?@MaartenBodewes,我知道我在某些方面错了,但我不知道它在哪里!据我对程序的了解,程序员只更改了他定义的变量(缓冲区)不是用于
APDU.setOutgoingAndSend
方法的真正的APDU缓冲区!:(那么为什么程序运行良好?!我遗漏了什么?我应该在so中作为一个新问题问它吗?
APDU.getBuffer
是否返回APDU缓冲区,您还希望有什么其他缓冲区?假设这行而不是上面的行(我刚刚更改了缓冲区的名称以明确我的问题):1:
byte[]temp=apdu.getBuffer();
2:
short length=(short)helloWorld.length;
3:
Util.arrayCopyNonAtomic(helloWorld,(short)0,temp,(short)0,(short)length);
4:
apdu.setOutgoingAndSend((short)0,length)
------在1中,我将APDU缓冲区的内容复制到名为temp的变量中。在3中,我将名为helloWord的数组的内容复制到名为temp的变量中。最后在4中,我将APDU缓冲区发送到CAD。对吗?亲爱的Maarten,我检查了一些其他小程序。它们在小程序中使用相同的
&
字符,例如问题中的案例。请看这里: