如何在java中将java字节数组转换为十六进制数组



我有一个Android应用程序,它使用字节数组将APDU命令发送到智能卡

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};

我想在使用函数SCardTransmit的ios应用程序中使用相同的apdu命令

似乎没有问题。Java理解十六进制表示法:编写是可以的

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

你的问题可能是结肠:

冒号用于"标记"代码,这样JVM就可以到达那个点并继续运行。也就是说,因为eg现在是一个标签,它可以指向CommandAPU的CONSTRUCTOR,这是代码,但不能指向CommandAPU生成的OBJECT(byte[]),这是数据。

您需要的是生成一个可以指向CommandAPU对象的变量:

CommandAPU eg;

然后调用构造函数,该构造函数生成一个对象。它返回一个指向对象在内存中位置的指针,所以也要指向那里:

eg = new CommandAPU(stuff);

你现在可以在任何需要CommandAPU的地方使用。

然而。。。您想使用SCardTransmit功能,是吗?C#可以很好地处理Windows DLL(或者我读过),但Java显然很棘手。。。您可以尝试阅读如何用Java完成这一切。您可以将字节数组从Java代码移动到C#,但我认为将已完成的对象从JVM移动到外部程序是不明智的。

也就是说,看起来你可以完全从Java中完成Card IO!多么令人兴奋。我盲目地在Java构造函数链上跋涉™,这就是我的发现深呼吸

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

再次呼吸

假设你把论点填对了,一百万件事都没有出错,那么你就可以使用

myChannel.transmit(eg);

做任何事。除非您已经拥有相关CardChannel的实例。

最后,这个网站是一个提出新问题的地方,而不是一个论坛。你的问题(或者更确切地说,你的错误)很可能已经在其他地方解决了。我知道面对巨大的资源墙可能会很吓人,这些资源都是用英语写的,但在来这里之前,请先在其他地方寻求帮助。祝你好运

相关内容

  • 没有找到相关文章

最新更新