2017-02-13 13 views
-9

我遇到一个Android应用程序,它使用字节数组APDU命令智能卡我怎样才能将Java字节数组十六进制的数组中的Java

eg : new CommandAPDU(new byte[]{(byte)0, (byte)-92, (byte)4, 
(byte)0, (byte)12, (byte)-96, (byte)0, (byte)0, 
(byte)2, (byte)0, (byte)19, (byte)0, (byte)0, (byte)0, (byte)1, (byte)1}); 

我怎样才能将它转换为十六进制的数组一样{0x80, 0xCA, 0x9F, 0x7F, 0x00};

我想使用funcion SCardTransmit

+2

这有什么,从用C#做什么,我可以看到 – BradleyDotNET

+0

@ rakeb.mazharul请看看 – Dilse

+0

这并不工作,除非他是注释线程... – BradleyDotNET

回答

0

似乎没有成为一个问题在iOS应用程序使用相同的APDU命令。 Java的理解十六进制表示:它的好写

eg = new CommandAPU(new byte[] {(byte)0x80, (byte)0xCA, (byte)0x9F, 0x7F, 0x00}); 

你的问题很可能是结肠:

冒号用于“标签”的代码,从而使JVM可以到这一点,并继续运行。也就是说,因为例如现在是一个标签,它可以指向用于CommandAPU的CONSTRUCTOR,这是代码,但不是由CommandAPU(byte [])生成的OBJECT,它们是数据。

你需要的是使一个变量,可以指向一个CommandAPU对象:

CommandAPU eg; 

然后调用构造函数,这使得一个对象。它返回一个指针转到对象在内存中的地方,所以要如点在那里,太:

eg = new CommandAPU(stuff); 

您现在可以使用例如,无论你需要一个CommandAPU。

但是...您想要使用SCardTransmit功能吗? C#可以很好地处理Windows DLL(或者我已经阅读过),但是Java显然非常棘手......您可以尝试阅读how to do it all in Java.您可以将Java代码中的字节数组移动到C#中,但我不认为将完成的对象从JVM移动到外部程序是理智的。

这就是说,它看起来像你可以完全从Java卡IO!多么激动人心。我一直在盲目地研究Java Constructor Chain™,这就是我发现的。 深呼吸

myChannel = javax.smartcardio.TerminalFactory.getDefault().terminals().getTerminal(theNameOfTheTerminal).connect(theProtocolToUse).getBasicChannel(); 

再呼吸

假设你在正确的参数填充一个亿分的事情没出问题,你就可以使用

myChannel.transmit(eg); 

做随你。除非您已经拥有相关CardChannel的实例。

作为最后一点,本网站旨在成为提出新问题的地方,而不是论坛。你的问题(或者说,你的错误)可能已经在其他地方解决了。我知道这可能会令人感到恐惧,面对巨大的资源壁垒,所有这些都是用英文书写的,但在来到这里之前请先到别处寻求帮助。祝你好运!

相关问题