Android:将NDEF记录有效负载从字节转换为int

时间:2014-04-13 05:07:00

标签: java android nfc ndef nfc-p2p

很好奇如何将我的NdefRecord中的有效负载从它所进入的字符串转换为可以在我的应用程序的其余部分中使用的整数。 parseint和valueof方法导致我的应用程序崩溃。不知何故设法将故障缩小到一行代码:

int newtimer = Integer.valueOf(newtimermsg);

这一行导致我的应用程序崩溃,Newtimermsg是从收到的NdefRecord的有效负载中提取的字符串,如下面的代码所示:

String newtimermsg = new String(msg.getRecords()[0].getPayload());

这可行,因为我已经通过newtimermsg上使用的settext检查了应用程序,它完美地显示了收到的消息,但我想知道如何将其转换为整数。听起来非常基本和愚蠢,不知道如何做到这一点,但任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这取决于您最初如何将整数值存储在NDEF记录的有效负载中。

  1. 转换为整数的文本表示形式

    将整数转换为记录有效负载:

    int myInteger = ...;
    String payloadString = Integer.toString(myInteger);
    byte[] payload = payloadString.getBytes("US-ASCII");
    

    将记录有效负载转换为整数:

    byte[] payload = ...;
    String payloadString = new String(payload, "US-ASCII");
    int myInteger = Integer.parseInt(payloadString);
    
  2. 整数和字节数组之间的直接转换(在存储方面更高效)

    将整数转换为记录有效负载:

    int myInteger = ...;
    ByteBuffer buffer = ByteBuffer.allocate(4);
    buffer.putInt(myInteger);
    byte[] payload = buffer.array();
    

    将记录有效负载转换为整数:

    byte[] payload = ...;
    ByteBuffer buffer = ByteBuffer.wrap(payload);
    int myInteger = buffer.getInt();